it-swarm.com.de

Wie konvertiere ich eine Liste von Schlüsselwerttupeln in ein Wörterbuch?

Ich habe eine Liste, die so aussieht:

[('A', 1), ('B', 2), ('C', 3)]

Ich möchte daraus ein Wörterbuch machen, das so aussieht:

{'A': 1, 'B': 2, 'C': 3}

Was ist der beste Weg, um dies zu tun?

EDIT: Meine Liste der Tupel ist eigentlich eher wie:

[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]
115
Fred Wilson

Dies gibt mir den gleichen Fehler wie der Versuch, die Liste aufzuteilen und zu komprimieren. ValueError: Das Dictionary Update Sequence Element # 0 hat die Länge 1916; 2 ist erforderlich

DAS ist deine aktuelle Frage.

Die Antwort ist, dass die Elemente Ihrer Liste nicht so sind, wie Sie glauben. Wenn Sie myList[0] Eingeben, werden Sie feststellen, dass das erste Element Ihrer Liste kein Zwei-Tupel ist, z. ('A', 1), Aber eher eine iterable Ausgabe von 1916.

Sobald Sie tatsächlich eine Liste in der Form haben, die Sie in Ihrer ursprünglichen Frage angegeben haben (myList = [('A',1),('B',2),...]), ist alles, was Sie tun müssen, dict(myList).

83
ninjagecko
>>> dict([('A', 1), ('B', 2), ('C', 3)])
{'A': 1, 'C': 3, 'B': 2}
152
Andreas Jung

Hast du das versucht?

>>> l=[('A',1), ('B',2), ('C',3)]
>>> d=dict(l)
>>> d
{'A': 1, 'C': 3, 'B': 2}
28
Useless

Hier ist eine Möglichkeit, mit doppelten Tupel "Schlüsseln" umzugehen:

# An example
l = [('A', 1), ('B', 2), ('C', 3), ('A', 5), ('D', 0), ('D', 9)]

# A solution
d = dict()
[d [t [0]].append(t [1]) if t [0] in list(d.keys()) 
 else d.update({t [0]: [t [1]]}) for t in l]
d

OUTPUT: {'A': [1, 5], 'B': [2], 'C': [3], 'D': [0, 9]}
4
Tam Le

Ein anderer Weg mit Listenverständnissen,

>>> t = [('A', 1), ('B', 2), ('C', 3)]
>>> d = [{ i:j for i,j in t }]
>>> d
[{'A': 1, 'C': 3, 'B': 2}]
0
Arun