it-swarm.com.de

Wörterbuch in Liste konvertieren?

Mögliches Duplikat:
Wie kann ich ein Python Wörterbuch in eine Liste von Tupeln konvertieren?

Ich versuche, ein Python Wörterbuch in eine Python Liste umzuwandeln, um einige Berechnungen durchzuführen.

#My dictionary
dict = {}
dict['Capital']="London"
dict['Food']="Fish&Chips"
dict['2012']="Olympics"

#lists
temp = []
dictList = []

#My attempt:
for key, value in dict.iteritems():
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp) 
    aKey = ""
    aValue = ""

Das ist mein Versuch, aber ich kann nicht herausfinden, was los ist.

169
Federer

Ihr Problem ist, dass Sie key und value in Anführungszeichen haben, um sie zu Zeichenfolgen zu machen, dh Sie setzen aKey so, dass sie die Zeichenfolge "key" Und nicht den Wert enthalten der Variablen key. Außerdem löschen Sie nicht die temp -Liste, sondern fügen sie jedes Mal hinzu, anstatt nur zwei Elemente darin zu haben.

Versuchen Sie Folgendes, um Ihren Code zu korrigieren:

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

Sie müssen die Schleifenvariablen key und value nicht in eine andere Variable kopieren, bevor Sie sie verwenden. Ich habe sie daher gelöscht. Ebenso müssen Sie zum Erstellen einer Liste nicht append verwenden, sondern können sie wie oben gezeigt in eckigen Klammern angeben. Und wir hätten dictlist.append([key,value]) tun können, wenn wir so kurz wie möglich sein wollten.

Oder verwenden Sie einfach dict.items(), wie es vorgeschlagen wurde.

130
Dave Webb
dict.items()

Macht den Trick.

385
Björn

Das Konvertieren von dict nach list ist in Python ganz einfach. Drei Beispiele:

>> d = {'a': 'Arthur', 'b': 'Belling'}

>> d.items()
[('a', 'Arthur'), ('b', 'Belling')]

>> d.keys()
['a', 'b']

>> d.values()
['Arthur', 'Belling']
170
Akseli Palén

Sie sollten dict.items() verwenden.

Hier ist eine einzeilige Lösung für Ihr Problem:

[(k,v) for k,v in dict.items()]

und Ergebnis:

[('Food', 'Fish&Chips'), ('2012', 'Olympics'), ('Capital', 'London')]

oder du kannst tun

l=[]
[l.extend([k,v]) for k,v in dict.items()]

zum:

['Food', 'Fish&Chips', '2012', 'Olympics', 'Capital', 'London']
49
Shay
 >>> a = {'foo': 'bar', 'baz': 'quux', 'hello': 'world'}
 >>> list(reduce(lambda x, y: x + y, a.items()))
 ['foo', 'bar', 'baz', 'quux', 'hello', 'world']

Zur Erklärung: a.items () gibt eine Liste von Tupeln zurück. Wenn Sie zwei Tupel addieren, wird ein Tupel erstellt, das alle Elemente enthält. Die Reduktion erzeugt also ein Tupel mit allen Schlüsseln und Werten und die Liste (...) erstellt daraus eine Liste.

31
Martin DeMello

Wahrscheinlich möchten Sie nur Folgendes:

dictList = dict.items()

Ihr Ansatz hat zwei Probleme. Zum einen verwenden Sie key und value in Anführungszeichen, bei denen es sich um Zeichenfolgen mit den Buchstaben "key" und "value" handelt, die sich nicht auf die Variablen dieses Namens beziehen. Außerdem fügen Sie der "temporären" Liste immer wieder Elemente hinzu und entfernen niemals alte Elemente, die bereits aus früheren Iterationen enthalten sind. Stellen Sie sicher, dass Sie in jeder Iteration eine neue und leere temp-Liste haben, und verwenden Sie die Variablen key und value:

for key, value in dict.iteritems():
    temp = []
    aKey = key
    aValue = value
    temp.append(aKey)
    temp.append(aValue)
    dictList.append(temp)

Beachten Sie auch, dass dies ohne die temporären Variablen kürzer geschrieben werden könnte (und in Python 3 mit items() anstelle von iteritems()):

for key, value in dict.items():
    dictList.append([key, value])
20
sth

Wenn Sie ein Wörterbuch nur erstellen, um eine Liste von Tupeln zu erstellen, da das Erstellen von Dikten, wie Sie es sind, ein Problem sein kann, sollten Sie Zip () verwenden.

Es ist besonders nützlich, wenn Sie eine Überschrift und mehrere Zeilen haben. Zum Beispiel, wenn ich davon ausgehe, dass Sie Olympia-Statistiken für Länder wollen:

headers = ['Capital', 'Food', 'Year']
countries = [
    ['London', 'Fish & Chips', '2012'],
    ['Beijing', 'Noodles', '2008'],
]

for olympics in countries:
    print Zip(headers, olympics)

gibt

[('Capital', 'London'), ('Food', 'Fish & Chips'), ('Year', '2012')]
[('Capital', 'Beijing'), ('Food', 'Noodles'), ('Year', '2008')]

Ich weiß nicht, ob das das Endziel ist und ob ich nicht am Thema bin, aber es könnte etwas sein, an das ich denken sollte.

5
Morgan