2017-03-13 5 views
0

Nehmen wir an, ich definiere eine Variable a = 42 und ich übergebe es an ein Wörterbuch di = {a: 'fourty-two'}. Wie liest Python den Schlüssel in di?
a als eine Variable oder Nummer, die a bezieht sich auf?Variable übergeben als Schlüssel im Wörterbuch

Falls der Schlüssel nur eine Referenz auf eine Zahl ist, ändert sich die Definition (zB a = 10) den Schlüssel in di?
Kann mir jemand das erklären?
Danke!

EDIT:
Wenn ich Wert der Variablen a-10 ändern, warum Schlüssel in di nicht

+2

Haben Sie es versucht, um zu sehen, was passiert? –

+1

Meinst du 'a' statt' x'? – Carcigenicate

+0

Ich verstehe nicht, was Sie meinen mit "* übergeben Sie es an ein Wörterbuch *"? Wie kommst du daran vorbei? –

Antwort

0

Die Schlüssel in einem Wörterbuch sind unveränderlich nicht ändert. Sie können sie nicht variabel machen. Bedenken Sie:

>>> a = 42 
>>> di = {a:'forty-two'} 
>>> di 
{42: 'forty-two'} 

Das Wörterbuch selbst hat einfach 42 als Schlüssel. Die Tatsache, dass Sie beim Einrichten des Wörterbuchs a verwendet haben, ist ziemlich irrelevant. Ähnlich, da a 42 ist, wenn ich schreibe b = a + 1 dann b wird 43 sein, und diese Tatsache wird nicht geändert, wenn ich später a zu 10 ändern. In diesem Fall wird b nicht magisch 11 werden.

Wenn Sie nicht möchten a an eine neue Nummer binden, und dass die neue Nummer als Schlüssel verwenden, müssen Sie manuell das Wörterbuch ändern:

>>> old_a = a #store old value of a 
>>> a = 10 #assign new value to a 
>>> di[a] = di[old_a] #assign value to new key 
>>> del(di[old_a]) #delete old key-value pair 
>>> di 
{10: 'forty-two'} 

Dies ist etwas gewunden, was darauf schließen läßt, dass es isn Es ist sehr pythonisch und es gibt wahrscheinlich einen besseren Weg, um das zu tun, was du versuchst zu tun.

auf Bearbeiten Der Prozess Taste tauschen kann mit .pop(), wie @ ŁukaszRogalski rationalisiert werden, Punkten oben in einem Kommentar aus:

old_a = a 
a = 10 
di[a] = d.pop(old_a) 

diese Weise der alten Schlüssel in dem Prozess der löscht automatisch zuweisen sein Wert für den neuen Schlüssel.

+0

Danke für die Antwort! Es hilft, aber Code, den ich benutze, ist ein bisschen kompliziert und genau umgekehrt (Liste 'a' wird durch' a.append() 'geändert und alle Dinge, die an' a' gebunden sind, wurden ebenfalls geändert) – SevO

+0

Wenn 'a' sich bezieht Eine Liste kann nicht verwendet werden, um einen Schlüssel eines Wörterbuchs zu erstellen. –

+0

Wie gesagt, es ist ein bisschen kompliziert. Ich verwende Klasse, um einen Hash der Liste zu erstellen, wenn die Liste als Schlüssel verwendet wird. – SevO

Verwandte Themen