1538 Stimmen

Erstellen eines Wörterbuchs mit Verständigung

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)}

2267voto

fortran Punkte 70744

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))

283voto

SilentGhost Punkte 285785

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 .

73voto

michaelmeyer Punkte 7514

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}

50voto

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')]

Diktatverstehenssyntax:

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'}

Hinzufügen eines Filters:

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.

44voto

Sphynx-HenryAY Punkte 722

In Python 2.7 geht das so:

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

Zip sie !

CodeJaeger.com

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.

Powered by:

X