2017-08-08 2 views
0

Hallo Ich habe mich gefragt, wenn ein verschachteltes Wörterbuch erstellen die Verwendung der Fromkeys-Methode, um ein verschachteltes Diktat erstellt funktioniert nicht.Initiieren verschachtelten Dict mit .fromkeys

x=[1,2,3,4,5] 
y=[7,8,9,10,11] 
zx=dict.fromkeys(x,dict.fromkeys(y,0)) 

Es schafft eine verschachtelte dict aber wenn Sie versuchen, es

zx zu aktualisieren [1] [8] + = 1

Es aktualisiert alle Werte für alle outerkeys, die den Schlüssel 8 haben.

ich mich gefragt, warum dies passiert, wenn diese Funktion unter Verwendung eines verschachtelten dict machen

+0

Das ist, weil Sie alle Schlüssel mit dem * gleichen * -Wert zugeordnet. –

Antwort

1

das ist, weil Sie alle ke zugeordnet ys des äußeren Wörterbuchs mit dem selben inneren Wörterbuch. Sie erstellten zuerst ein Wörterbuch mit dict.fromkeys(y,0), und dann verknüpfen Sie dieses Wörterbuch mit allen Schlüsseln mit: dict.fromkeys(x,...).

Ein Weg, um das Wörterbuch Sie ist zum Beispiel Wörterbuch Verständnis wollen konstruieren:

zx = {k: dict.fromkeys(y,0) for k in x} 

Obwohl dies sieht ganz das gleiche ist es nicht: hier bewerten wir für dict.fromkeys(y,0) jederk in xwieder. Als Ergebnis werden die konstruierten Wörterbücher alle entsprechen, aber nicht das gleiche Objekt.

Nun erhalten wir die erwartete:

>>> x=[1,2,3,4,5] 
>>> y=[7,8,9,10,11] 
>>> zx = {k: dict.fromkeys(y,0) for k in x} 
>>> zx 
{1: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 2: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 3: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 4: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 5: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}} 
>>> zx[1][8]+=1 
>>> zx 
{1: {8: 1, 9: 0, 10: 0, 11: 0, 7: 0}, 2: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 3: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 4: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}, 5: {8: 0, 9: 0, 10: 0, 11: 0, 7: 0}} 
+0

Würden Sie nicht eine Liste mit nicht hashbaren Typen bekommen? Also müsste ich die List Tupel machen? – user6656104

+0

@ user6656104: aber die Schlüssel sind keine Listen, die Schlüssel sind * Elemente * der Liste. Angesichts dieser Elemente sind hashable (wie Ints, Strings, etc.), dann gibt es kein Problem. –

+0

Oh ich sehe, danke – user6656104

Verwandte Themen