Ä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

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.


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}
>>> 

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() }


"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.


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'}}

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())

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'}

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}

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


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

-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

1
Ich sehe nicht, wie das mit der Frage zusammenhängt; Könnten Sie bitte näher darauf eingehen?
Apraetor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.