Ändern Sie den Namen eines Schlüssels im Wörterbuch

Antworten:

715

Einfach in 2 Schritten erledigt:

dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]

Oder in 1 Schritt:

dictionary[new_key] = dictionary.pop(old_key)

was erhöht, KeyErrorwenn dictionary[old_key]undefiniert ist. Beachten Sie, dass dies wird löschen dictionary[old_key].

>>> dictionary = { 1: 'one', 2:'two', 3:'three' }
>>> dictionary['ONE'] = dictionary.pop(1)
>>> dictionary
{2: 'two', 3: 'three', 'ONE': 'one'}
>>> dictionary['ONE'] = dictionary.pop(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1
Moinudin
quelle
59
Dies wird einen KeyError in beiden Fällen auslösen, wenn der Schlüssel nicht vorhanden ist, aber Sie könnten dies dict[new_value] = dict.pop(old_value, some_default_value)vermeiden
Tobias Kienzler
2
Beachten Sie, dass dies auch die Position des Schlüssels in CPython 3.6+ / Pypy und Python 3.7+ beeinflussen würde. Das heißt, im Allgemeinen unterscheidet sich die Position von old_keyvon der Position von new_key.
norok2
63

Wenn Sie alle Schlüssel ändern möchten:

d = {'x':1, 'y':2, 'z':3}
d1 = {'x':'a', 'y':'b', 'z':'c'}

In [10]: dict((d1[key], value) for (key, value) in d.items())
Out[10]: {'a': 1, 'b': 2, 'c': 3}

Wenn Sie einen einzelnen Schlüssel ändern möchten: Sie können mit jedem der oben genannten Vorschläge fortfahren.

Tauquir
quelle
3
Dadurch wird ein neues Wörterbuch erstellt, anstatt ein vorhandenes zu aktualisieren - was möglicherweise nicht wichtig ist, aber nicht gefragt wurde.
Martineau
15
Gleiche Antwort mit einem Wörterbuchverständnis:{ d1[key] : value for key, value in d.items() }
Morwenn
35

Pop'n'Fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 
Kevpie
quelle
26

In Python 2.7 und höher können Sie das Wörterbuchverständnis verwenden: Dies ist ein Beispiel, das mir beim Lesen einer CSV mit einem DictReader begegnet ist. Der Benutzer hatte alle Spaltennamen mit ':' versehen.

ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}

um das nachfolgende ':' in den Tasten loszuwerden:

corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }

Station
quelle
"AttributeError: 'dict' Objekt hat kein Attribut 'replace'"
user1318135
2
user1318125, ich würde vorschlagen, Copy Paste zu versuchen. Dies funktioniert für mich in der Python-Konsole (die .replace wird für die Zeichenfolge ausgeführt, die als Schlüssel verwendet wird)
north.mister
7

Da Wörterbücher zum Nachschlagen von Werten verwendet werden, können Sie sie nicht wirklich ändern. Das nächste, was Sie tun können, ist, den mit dem alten Schlüssel verknüpften Wert zu speichern, ihn zu löschen und dann einen neuen Eintrag mit dem Ersatzschlüssel und dem gespeicherten Wert hinzuzufügen. Einige der anderen Antworten veranschaulichen verschiedene Möglichkeiten, wie dies erreicht werden kann.

Martineau
quelle
5

Wenn Sie ein komplexes Diktat haben, bedeutet dies, dass das Diktat ein Diktat oder eine Liste enthält:

myDict = {1:"one",2:{3:"three",4:"four"}}
myDict[2][5] = myDict[2].pop(4)
print myDict

Output
{1: 'one', 2: {3: 'three', 5: 'four'}}
Hatem
quelle
4

Keine direkte Möglichkeit, dies zu tun, aber Sie können löschen und dann zuweisen

d = {1:2,3:4}

d[newKey] = d[1]
del d[1]

oder Massenschlüsseländerungen vornehmen:

d = dict((changeKey(k), v) for k, v in d.items())
AndiDog
quelle
2
d = { changeKey(k): v for k, v in d.items()}
Erich
4

So konvertieren Sie alle Schlüssel im Wörterbuch

Angenommen, dies ist Ihr Wörterbuch:

>>> sample = {'person-id': '3', 'person-name': 'Bob'}

So konvertieren Sie alle Bindestriche in Unterstriche im Beispielwörterbuchschlüssel:

>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}
Pranjal Singi
quelle
3
d = {1:2,3:4}

Angenommen, wir möchten die Schlüssel in die Listenelemente p = ['a', 'b'] ändern. Der folgende Code reicht aus:

d=dict(zip(p,list(d.values()))) 

und wir bekommen

{'a': 2, 'b': 4}
Ksreenivas Karanam
quelle
0

Sie können denselben Wert vielen Schlüsseln zuordnen oder einfach einen Schlüssel entfernen und einen neuen Schlüssel mit demselben Wert erneut hinzufügen.

Zum Beispiel, wenn Sie Schlüssel-> Werte haben:

red->1
blue->2
green->4

Es gibt keinen Grund, warum Sie nicht hinzufügen purple->2oder entfernen red->1und hinzufügen könnenorange->1

DGH
quelle
0

Bei gleichzeitiger Änderung aller Tasten. Hier drücke ich die Schlüssel.

a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
b = {ps.stem(w) : a[w] for w in a.keys()}
print(b)
>>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output
Ananth Kumar Vasamsetti
quelle
-3

Ich habe diese genaue Antwort nicht gesehen:

dict['key'] = value

Sie können dies sogar für Objektattribute tun. Machen Sie sie zu einem Wörterbuch, indem Sie dies tun:

dict = vars(obj)

Dann können Sie die Objektattribute wie ein Wörterbuch bearbeiten:

dict['attribute'] = value
MicahT
quelle
1
Ich sehe nicht, wie das mit der Frage zusammenhängt; Könnten Sie bitte näher darauf eingehen?
Apraetor