Python-Dictionary Comprehension
Ist es möglich, erstellen Sie eine dictionary comprehension in Python (für die Schlüssel)?
Ohne Liste Verstehens, die Sie verwenden können, so etwas wie dieses:
l = []
for n in range(1, 11):
l.append(n)
Können wir diese kürzen, um eine Liste Verständnis: l = [n for n in range(1, 11)]
.
Allerdings sagen, dass ich möchte, um eine dictionary-keys mit dem gleichen Wert.
Kann ich tun:
d = {}
for n in range(1, 11):
d[n] = True # same value for each
Habe ich versucht, dieses:
d = {}
d[i for i in range(1, 11)] = True
Allerdings bekomme ich eine SyntaxError
auf die for
.
Zusätzlich (brauche ich nicht dieses Teil, sondern nur Fragen), können Sie festlegen, dass eine Wörterbuch-Tasten, um eine Reihe von verschiedenen Werten wie diesen:
d = {}
for n in range(1, 11):
d[n] = n
Ist das möglich mit einem Wörterbuch Verständnis?
d = {}
d[i for i in range(1, 11)] = [x for x in range(1, 11)]
Dies wirft auch ein SyntaxError
auf die for
.
InformationsquelleAutor Rushy Panchal | 2013-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es Wörterbuch Verstehens in Python 2.7+, aber Sie funktioniert nicht ganz so, wie Sie sind, es zu versuchen. Wie eine list comprehension, erstellen Sie eine neue Wörterbuch;, die Sie nicht verwenden können Sie Tasten hinzufügen, um ein vorhandenes Wörterbuch. Auch, müssen Sie die Schlüssel und Werte, obwohl natürlich, können Sie einen dummy-Wert ein, wenn Sie möchten.
Wenn Sie möchten, um Sie alle setzen auf True:
Was Sie scheinen zu Fragen, ist eine Möglichkeit, um mehrere Tasten auf einmal auf einem vorhandenen Wörterbuch. Es gibt keine direkte Verknüpfung. Sie können entweder die Schleife, wie du bereits gezeigt, oder Sie können ein Wörterbuch Verständnis zu schaffen, ein neues dict mit den neuen Werten, und führen Sie dann
oldDict.update(newDict)
Zusammenführen, werden die neuen Werte in den alten dict.dict.update
können auch akzeptieren eine iterierbar von Schlüssel-Wert-Paare genau wie diedict
KonstruktorBeachten Sie, dass, wenn Sie um ein Wörterbuch zu erstellen, bei der alle Werte gleich ist, verwenden Sie
dict.fromkeys()
. So setzen Sie alle Werte aufTrue
verwendendict.fromkeys(range(5), True)
. Vorsicht, der Wert ist nicht kopiert, so können Sie dies vermeiden wollen, wenn Sie einen änderbaren Wert; es wird gemeinsam für alle Tasten.Hinweis: die Schlüssel können das Ergebnis einer Methode:
{ n*2 : n for n in range(3) } => {0: 0, 2: 1, 4: 2}
. Beide kann man in der gleiche Ausdruck:{ n*2 : n*3 for n in range(3) } => { 0: 0, 2: 3, 4: 6 }
.InformationsquelleAutor BrenBarn
Können Sie die
dict.fromkeys
Methode der Klasse ...Dies ist der Schnellste Weg, um ein Wörterbuch zu erstellen, wo alle Schlüssel anzeigen, um den gleichen Wert.
Aber jedoch nicht verwenden Sie diese mit veränderlichen Objekten:
Wenn Sie nicht wirklich müssen zu initialisieren aller Tasten, ein
defaultdict
könnte nützlich sein, als gut:Zu beantworten, der zweite Teil, der einen dict-comprehension ist genau das, was Sie brauchen:
Sollten Sie wahrscheinlich nicht tun, aber Sie können auch erstellen Sie eine Unterklasse von
dict
die funktioniert ähnlich wie einedefaultdict
wenn Sie überschreiben__missing__
:d = defaultdict(lambda: True)
, die lambda ist nicht erforderlich, da Wahr ist (oder nicht) werden verändert.InformationsquelleAutor mgilson
InformationsquelleAutor NPE
Ich mag die @mgilson Kommentar, wenn man da ein zwei iterables, entspricht den Tasten und die andere die Werte, können Sie auch Folgendes tun.
geben
InformationsquelleAutor ehontz
Verwenden dict() auf eine Liste von Tupeln, die diese Lösung ermöglicht es Ihnen, beliebige Werte in jeder Liste, solange Sie die gleiche Länge
d = dict(zip(i_s,x_s))
InformationsquelleAutor Bryan
Beachten Sie in diesem Beispiel das zählen der vorkommen der Wörter in einer Liste, Wörterbuch Verständnis
Und das Ergebnis ist
InformationsquelleAutor adonese
Den Hauptzweck einer Liste Verständnis ist das erstellen einer neuen Liste basierend auf einem anderen eins, ohne Veränderung oder Zerstörung der ursprünglichen Liste.
Statt zu schreiben
oder
sollten Sie nur schreiben
In den oberen zwei code-Blöcke, die Sie erstellen eine neue Liste Durchlaufen und es einfach wieder jedes element. Es ist nur eine teure Art und Weise der Erstellung einer Liste kopieren.
Um ein neues Wörterbuch mit allen Schlüsseln auf den gleichen Wert gesetzt, basierend auf einem anderen dict, dies zu tun:
Sie erhalten eine SyntaxError-weil, wenn Sie schreiben
du bist im Grunde sagen: "meine Taste" i for i in range(1, 11)' auf "True" und "i for i in range(1, 11)" ist keine gültige Schlüssel, es ist nur ein syntax-Fehler. Wenn dicts unterstützten Listen als Schlüssel, Sie möchte etwas tun, wie
und nicht
aber Listen sind nicht hashable, so dass Sie nicht verwenden können Sie als dict-Schlüssel.
InformationsquelleAutor Bonifacio2
können Sie nicht hash so einer Liste.
versuchen Sie, diese stattdessen verwendet es Tupeln
InformationsquelleAutor Aditya Sihag