Kann ich die Syntax des Listenverständnisses verwenden, um ein Wörterbuch zu erstellen?
Zum Beispiel durch Iteration über Paare von Schlüsseln und Werten:
d = {... for k, v in zip(keys, values)}
Kann ich die Syntax des Listenverständnisses verwenden, um ein Wörterbuch zu erstellen?
Zum Beispiel durch Iteration über Paare von Schlüsseln und Werten:
d = {... for k, v in zip(keys, values)}
Verwenden Sie eine Diktatverständnis (Python 2.7 und höher):
{key: value for (key, value) in iterable}
Für einfachere Fälle oder frühere Versionen von Python können Sie alternativ die dict
Konstrukteur, z.B.:
pairs = [('a', 1), ('b', 2)]
dict(pairs) #=> {'a': 1, 'b': 2}
dict([(k, v+1) for k, v in pairs]) #=> {'a': 2, 'b': 3}
Bei getrennten Arrays von Schlüsseln und Werten, verwenden Sie die dict
Konstrukteur mit zip
:
keys = ['a', 'b']
values = [1, 2]
dict(zip(keys, values)) #=> {'a': 1, 'b': 2}
2) "zip'ped" from two separate iterables of keys/vals
dict(zip(list_of_keys, list_of_values))
In Python 3 und Python 2.7+ sehen Dictionary Comprehensions wie folgt aus:
d = {k:v for k, v in iterable}
Für Python 2.6 oder früher, siehe Die Antwort von Fortran .
Sie brauchen nicht einmal über die iterable zu iterieren, wenn sie bereits eine Art von Mapping umfasst, da der dict-Konstruktor dies gnädigerweise für Sie tut:
>>> 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}
Erstellen eines Wörterbuchs mit Listenverständnis in Python
Ich mag die Python-Syntax zum Verstehen von Listen.
Kann es auch zur Erstellung von Wörterbüchern verwendet werden? Zum Beispiel, durch Iteration über Paare von Schlüsseln und Werten:
mydict = {(k,v) for (k,v) in blah blah blah}
Sie suchen nach dem Ausdruck "Diktatverständnis" - das ist es tatsächlich:
mydict = {k: v for k, v in iterable}
Angenommen, blah blah blah
ist eine Iterabilität von zwei Tupeln - du bist so nah dran. Lass uns ein paar solche "Blahs" erstellen:
blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]
Die Syntax hier ist der Teil der Zuordnung. Was dies zu einem dict
Verständnis anstelle einer set
Verständnis (was Ihr Pseudocode annähernd wiedergibt) ist der Doppelpunkt, :
wie unten:
mydict = {k: v for k, v in blahs}
Und wir sehen, dass es funktioniert und die Einfügereihenfolge ab Python 3.7 beibehalten werden sollte:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}
In Python 2 und bis zu 3.6 war die Reihenfolge nicht garantiert:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}
Alle Comprehensions verfügen über eine Mapping-Komponente und eine Filterkomponente, die Sie mit beliebigen Ausdrücken versehen können.
Sie können also einen Filterteil an das Ende anfügen:
>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}
Hier wird nur geprüft, ob das letzte Zeichen durch 2 teilbar ist, um Daten herauszufiltern, bevor die Schlüssel und Werte zugeordnet werden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.