it-swarm.com.de

Erstellen Sie ein Wörterbuch mit Listenverständnis

Ich mag die Python -Listenverständnissyntax.

Kann man damit auch Wörterbücher erstellen? Zum Beispiel durch Iteration über Schlüssel- und Wertepaare:

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

Ab Python 2.7 und 3 sollten Sie einfach die dikt verständliche Syntax verwenden:

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

In Python 2.6 und früheren Versionen kann das integrierte dict eine Iteration von Schlüssel/Wert-Paaren empfangen, sodass Sie ihm ein Listenverständnis oder einen Generatorausdruck übergeben können. Zum Beispiel:

dict((key, func(key)) for key in keys)

Wenn Sie jedoch bereits über wiederholbare Schlüssel und/oder Werte verfügen, müssen Sie kein Verständnis verwenden. Am einfachsten rufen Sie einfach das integrierte dict direkt auf:

# consumed from any iterable yielding pairs of keys/vals
dict(pairs)

# "zipped" from two separate iterables of keys/vals
dict(Zip(list_of_keys, list_of_values))
1777
fortran

In Python 3 und Python 2.7+ sieht das Wörterbuchverständnis folgendermaßen aus:

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

Für Python 2.6 oder früher siehe fortrans Antwort .

224
SilentGhost

Tatsächlich müssen Sie nicht einmal über das Iterable iterieren, wenn es bereits eine Art Mapping umfasst.

>>> 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}
52
michaelmeyer

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!

38
Sphynx-HenryAY

Um die Antwort von @ fortran zu ergänzen, wenn Sie eine Liste von Schlüsseln key_list sowie eine Liste von Werten value_list durchlaufen möchten:

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

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

Ich mag die Python -Listenverständnissyntax.

Kann man damit auch Wörterbücher erstellen? Zum Beispiel durch Iteration über Schlüssel- und Wertepaare:

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

Sie suchen nach dem Begriff "diktieren Verständnis" - es ist eigentlich:

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

Dies gilt fast bis auf das bla bla bla:

mydict = {(k,v) for (k,v) in blah blah blah}
                                 ^^^^^^--invalid syntax

Angenommen, blah blah blah ist eine Iteration von zwei Tupeln - Sie sind so nah dran. Lassen Sie uns ein paar "Blahs" wie folgt erstellen:

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

Dikt verständnis syntax:

Jetzt ist die Syntax hier der Zuordnungsteil. Was macht dies ein dict Verständnis anstelle von einem set Verständnis (was Ihr Pseudo-Code annähert) ist der Doppelpunkt, : wie folgt:

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

Und wir sehen, dass es funktioniert hat und die Einfügereihenfolge ab Python 3.7 beibehalten sollte:

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

In Python 2 und bis 3.6 war die Reihenfolge nicht garantiert:

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

Filter hinzufügen:

Jedes Verständnis enthält eine Zuordnungskomponente und eine Filterkomponente, die Sie mit beliebigen Ausdrücken versehen können.

So können Sie am Ende einen Filterteil hinzufügen:

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

Hier wird nur getestet, ob das letzte Zeichen durch 2 teilbar ist, um Daten herauszufiltern, bevor die Schlüssel und Werte zugeordnet werden.

19
Aaron Hall

Python-Version <2.7, gehen Sie wie folgt vor:

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

Python-Version> = 2.7, machen Sie folgendes:

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

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

Was ich hier tun möchte, ist, ein Alphabetwörterbuch zu verursachen, in dem jedes Paar; ist der englische Buchstabe und die 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, dass Sie hier die Aufzählung verwenden, um eine Liste der Alphabete und ihrer Indizes in der Liste abzurufen, und die Alphabete und Indizes austauschen, um das Schlüsselwertpaar für das Wörterbuch zu generieren

Hoffe, es gibt Ihnen eine gute Vorstellung von Dictionary Comp und ermutigt Sie, es öfter zu verwenden, um Ihren Code kompakter zu machen

5
nomoreabond2017

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 ein Wörterbuch aus den beiden Listen:

print get_dic_from_two_lists(country, capital)

Die Ausgabe ist wie folgt,

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

Nur um ein weiteres Beispiel anzuführen. Stellen Sie sich vor, Sie haben die folgende Liste:

nums = [4,2,2,1,3]

und Sie möchten daraus ein Diktat machen, bei dem der Schlüssel der Index und der Wert das Element in der Liste ist. Sie können dies mit der folgenden Codezeile tun:

{index:nums[index] for index in range(0,len(nums))}
1
Ekhtiar
>>> {k: v**3 for (k, v) in Zip(string.ascii_lowercase, range(26))}

Python unterstützt Diktierverständnisse, mit denen Sie die Erstellung von Wörterbüchern zur Laufzeit mit einer ähnlich präzisen Syntax ausdrücken können.

Ein Wörterbuchverständnis hat die Form {key: value for (Schlüssel, Wert) in iterable}. Diese Syntax wurde in Python 3 eingeführt und bis zu Python 2.7 zurückportiert, sodass Sie sie unabhängig von der installierten Version von Python verwenden können sollten .

Ein kanonisches Beispiel besteht darin, zwei Listen zu erstellen und ein Wörterbuch zu erstellen, in dem das Element an jeder Position in der ersten Liste zu einem Schlüssel wird und das Element an der entsprechenden Position in der zweiten Liste zum Wert wird.

Die Zip-Funktion, die in diesem Verständnis verwendet wird, gibt einen Tupeliterator zurück, bei dem jedes Element im Tupel von der gleichen Position in jeder Eingabe-Iteration übernommen wird. Im obigen Beispiel enthält der zurückgegebene Iterator die Tupel ("a", 1), ("b", 2) usw.

Ausgabe:

{'i': 512, 'e': 64, 'o': 2744, 'h': 343, 'l': 1331, 's': 5832, 'b': 1, 'w': 10648, ' c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, "f": 125, "q": 4096, "u": 8000, "n": 2197, "m": 1728, "r": 4913, "k": 1000, "g": 216 , 'v': 9261}

1

Dieser Code erstellt ein Wörterbuch mit Listenverständnis für mehrere Listen mit unterschiedlichen Werten, die für pd.DataFrame() verwendet werden können.

#Multiple lists 
model=['A', 'B', 'C', 'D']
launched=[1983,1984,1984,1984]
discontinued=[1986, 1985, 1984, 1986]

#Dictionary with list comprehension
keys=['model','launched','discontinued']
vals=[model, launched,discontinued]
data = {key:vals[n] for n, key in enumerate(keys)}

enumerate übergibt n an vals, um jedes key mit seiner Liste abzugleichen

0
BERKO