Angenommen, ich habe eine Liste a
in Python, deren Einträge bequem einem Wörterbuch zugeordnet sind. Jedes gerade Element stellt den Schlüssel zum Wörterbuch dar, und das folgende ungerade Element ist der Wert
beispielsweise,
a = ['hello','world','1','2']
und ich möchte es in ein Wörterbuch konvertieren b
, wo
b['hello'] = 'world'
b['1'] = '2'
Was ist der syntaktisch sauberste Weg, um dies zu erreichen?
python
list
dictionary
Mike
quelle
quelle
Antworten:
Wenn
a
es groß ist, möchten Sie wahrscheinlich Folgendes tun, wodurch keine temporären Listen wie die oben genannten erstellt werden.In Python 3 könnten Sie auch ein Diktatverständnis verwenden, aber ironischerweise denke ich, dass der einfachste Weg, dies zu tun, mit
range()
und istlen()
, was normalerweise ein Codegeruch wäre.Daher ist die
iter()/izip()
Methode in Python 3 wahrscheinlich immer noch die pythonischste, obwohl sie, wie EOL in einem Kommentar feststellt,zip()
in Python 3 bereits faul ist, sodass Sie sie nicht benötigenizip()
.Wenn du es in einer Zeile haben willst, musst du schummeln und ein Semikolon verwenden. ;-);
quelle
zip(i, i)
in Python 3, dazip()
jetzt ein Iterator zurückgegeben wird.Einfache Antwort
Eine weitere Option (mit freundlicher Genehmigung von Alex Martelli - Quelle ):
Verwandte Anmerkung
Wenn Sie dies haben:
und Sie möchten dies (jedes Element der Liste gibt einen bestimmten Wert ein (in diesem Fall 2)):
Sie können verwenden:
quelle
fromkeys
.>>> dict.fromkeys(a, 2) {'bi': 2, 'double': 2, 'duo': 2, 'two': 2}
Sie können hierfür ganz einfach ein Diktatverständnis verwenden:
Dies entspricht der folgenden for-Schleife:
quelle
Etwas, das ich ziemlich cool finde, das heißt, wenn deine Liste nur 2 Elemente lang ist:
Denken Sie daran, dass dict jedes iterable akzeptiert, das ein iterable enthält, wobei jedes Element in der iterable selbst ein iterable mit genau zwei Objekten sein muss.
quelle
Vielleicht nicht die pythonischste, aber
quelle
enumerate
for i, key in enumerate(a[::2]):
. Immer noch unpythonisch, da der Diktatkonstrukteur den größten Teil der Arbeit hier für Sie erledigen kannfor i, key in enumerate(a[::2]):
Ansatz funktionieren könnte? Die resultierenden Paarwerte wären0 hello
und1 1
, und es ist mir unklar, wie ich sie zum Produzieren verwenden soll{'hello':'world', '1':'2'}
.enumerate(a)[::2]
Sie können dies ziemlich schnell tun, ohne zusätzliche Arrays zu erstellen, sodass dies auch für sehr große Arrays funktioniert:
Wenn Sie einen Generator haben
a
, noch besser:Hier ist der Überblick:
quelle
{'hello':'hello','world':'world','1':'1','2':'2'}
)Sie können es auch so machen (Konvertierung von Zeichenfolge zu Liste hier, dann Konvertierung in ein Wörterbuch)
quelle
Ich bin auch sehr daran interessiert, einen Einzeiler für diese Konvertierung zu haben, da eine solche Liste der Standardinitialisierer für Hash in Perl ist.
In diesem Thread wird eine außergewöhnlich umfassende Antwort gegeben -
Meins (ich bin ein Neuling in Python), das Python 2.7 Generator Expressions verwendet , wäre:
dict((a[i], a[i + 1]) for i in range(0, len(a) - 1, 2))
quelle
Ich bin nicht sicher, ob dies pythonisch ist, aber es scheint zu funktionieren
quelle
Versuchen Sie den folgenden Code:
quelle
Sie können diesen Ansatz auch ausprobieren, indem Sie die Schlüssel und Werte in einer anderen Liste speichern und dann die dict-Methode verwenden
Ausgabe:
quelle
quelle