Frage Erstellen Sie ein Wörterbuch mit Listenverständnis in Python


Ich mag die Python-Liste Verständnis Syntax.

Kann man damit auch Wörterbücher erstellen? Zum Beispiel, indem Sie über Paare von Schlüsseln und Werten iterieren:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work

1025
2017-11-17 10:07


Ursprung


Antworten:


In Python 2.6 und früheren Versionen kann der dict -Konstruktor ein iterables Schlüssel / Wert-Paar erhalten:

d = dict((key, value) for (key, value) in iterable)

Ab Python 2.7 und 3 können Sie einfach die dict Verständnis Syntax direkt:

d = {key: value for (key, value) in iterable}

Natürlich können Sie das Iterable beliebig verwenden (Tupel und Listenliterale, Generatorkomprehensionen, Listenkompromittierungen, Generatorfunktionen, Funktionszusammensetzung ... sich kreativ fühlen), solange jedes Element selbst aus zwei Elementen iterierbar ist:

d = {value: foo(value) for value in sequence if bar(value)}

def key_value_gen(k):
   yield chr(k+65)
   yield chr((k+13)%26+65)
d = dict(map(key_value_gen, range(26)))

1573
2017-11-17 10:09



In Python 3 und Python 2.7+ sehen Lexikon-Comprehensions folgendermaßen aus:

d = {k:v for k, v in iterable}

Für Python 2.6 oder früher, siehe Fortran's Antwort.


188
2017-11-17 10:22



In der Tat, Sie müssen nicht einmal über das iterable iterieren, wenn es bereits eine Art von Mapping enthält, der dict-Konstruktor tut es gnädig für Sie:

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}

38
2018-05-31 17:48



In Python 2.7 sieht es so aus:

>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}

Zip sie!


28
2017-10-08 02:59



Um zu @ fortran's Antwort hinzuzufügen, wenn Sie über eine Liste von Schlüsseln iterieren möchten key_list sowie eine Liste von Werten value_list:

d = dict((key, value) for (key, value) in zip(key_list, value_list))

oder

d = {(key, value) for (key, value) in zip(key_list, value_list)}

13
2018-01-15 00:23



Erstellen Sie ein Wörterbuch mit Listenverständnis in Python

Ich mag die Python-Liste Verständnis Syntax.

Kann man damit auch Wörterbücher erstellen? Zum Beispiel durch Iteration   über Schlüsselpaare und Werte:

mydict = {(k,v) for (k,v) in blah blah blah}

Angenommen blah blah blah ist ein iterierbares Zwei-Tupel - du bist so nah dran. Lass uns ein paar "Blahs" erstellen:

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

Dict Verständnis Syntax:

Jetzt ist die Syntax hier der Zuordnungsteil. Was macht das a dict Verständnis statt a set Verständnis (das ist, was Ihr Pseudo-Code approximiert) ist der Doppelpunkt, : Wie unten:

mydict = {k: v for k, v in blahs}

Und jetzt, wenn du es tust:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

Einen Filter hinzufügen:

Genau wie Listen-Comprehensions können Sie am Ende einen Filter-Part hinzufügen:

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

Hier prüfen wir, ob das letzte Zeichen durch 2 teilbar ist.


10
2018-01-03 21:57



Für Python-Version <2.7, tun Sie das folgende:

d = dict((i,True) for i in [1,2,3])

Für Python-Version> = 2.7, tun Sie das folgende:

d = {i: True for i in [1,2,3]}

9
2018-06-26 09:05



Hier ist ein weiteres Beispiel für die Wörterbucherstellung mit dict-Verständnis:

Was ich hier tun soll, ist ein Alphabetwörterbuch zu erstellen, wo jedes Paar; ist der englische Buchstabe und seine entsprechende Position im englischen Alphabet

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

Beachten Sie die Verwendung von enumerate hier, um eine Liste von Alphabeten und deren Indizes in der Liste zu erhalten und die Alphabete und Indizes zu vertauschen, um das Schlüsselwertpaar für das Wörterbuch zu erzeugen

Ich hoffe, es gibt Ihnen eine gute Vorstellung von Dictionary Comp und ermutigt Sie, es häufiger zu verwenden, um Ihren Code kompakt zu machen


6
2017-10-25 03:40



Versuche dies,

def get_dic_from_two_lists(keys, values):
    return { keys[i] : values[i] for i in range(len(keys)) }

Angenommen, wir haben zwei Listen Land und Hauptstadt

country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']

Dann erstelle Wörterbuch aus den zwei Listen:

print get_dic_from_two_lists(country, capital)

Die Ausgabe ist so,

{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}

3
2018-02-03 14:15