Liste der Tupel zum Wörterbuch


111

So konvertiere ich derzeit eine Liste von Tupeln in ein Wörterbuch in Python:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

Gibt es einen besseren Weg? Es scheint, dass es einen Einzeiler geben sollte, um dies zu tun.

Antworten:


177

Rufen Sie einfach dict()die Liste der Tupel direkt an

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp, ich wusste, dass es einen einfachen Weg geben würde ... Ich komme von Ruby hierher und versuche, die Python-Art zu lernen, Dinge zu tun. Vielen Dank!
Sarah Vessels

5
@chandresh Dies funktioniert in Python 3, daher ist kein Update erforderlich.
Sven Marnach

@SvenMarnach, hier ist meine Ausgabe des gleichen Befehls, den Sie oben auf py 3.5 Terminal geschrieben haben. Traceback (letzter Aufruf zuletzt): Datei "<ipython-input-313-7bb3559567ff>", Zeile 1, in <module> dict (my_list) TypeError: 'Dictionary'-Objekt kann nicht aufgerufen werden
CKM

4
@chandresh Dies hat nichts mit Python 3 zu tun - es liegt daran, dass Sie eine Variable namens haben dict, die das gleichnamige integrierte Python beschattet. Das solltest du niemals tun.
Sven Marnach

@SvenMarnach Oh. Vielen Dank. Es funktionierte. Eigentlich habe ich Code aus dem Web bekommen und versucht, diesen auszuführen. Es sieht so aus, als hätte der Autor den dictVariablennamen verwendet, von dem ich den Fehler erhalten habe. Danke noch einmal.
CKM

23

Der dictKonstruktor akzeptiert Eingaben genau so, wie Sie sie haben (Schlüssel- / Wertetupel).

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

Aus der Dokumentation :

Diese geben beispielsweise alle ein Wörterbuch zurück, das gleich {"eins": 1, "zwei": 2} ist:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

Mit dictVerständnis:

h = {k:v for k,v in l}

4
schön, weil es Ihnen erlaubt, den Schlüssel / Wert zu formatieren, bevor Sie ihn dem
Diktat

7

Es scheint, dass jeder hier davon ausgeht, dass die Liste der Tupel eine Eins-zu-Eins-Zuordnung zwischen Schlüssel und Werten aufweist (z. B. keine doppelten Schlüssel für das Wörterbuch). Da dies die erste Frage zu diesem Thema ist, poste ich eine Antwort auf einen allgemeineren Fall, in dem wir uns mit Duplikaten befassen müssen:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.