Changer le nom d'une clé dans le dictionnaire

Je veux changer la clé d'une entrée dans un dictionnaire Python.

Y a-t-il un moyen simple de le faire?

218
demandé sur physicalattraction 2010-12-10 10:09:21

11 réponses

Facile à faire en 2 étapes:

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

Ou en 1 étape:

dictionary[new_key] = dictionary.pop(old_key)

Qui va élever KeyError si dictionary[old_key] n'est pas défini. Notez que ce va Supprimer 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
445
répondu marcog 2016-05-15 20:36:11

Si vous voulez changer toutes les clés:

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}

Si vous voulez changer la clé unique: Vous pouvez aller avec un de la suggestion ci-dessus.

39
répondu Tauquir 2010-12-10 07:55:42

Pop'n'Fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 
23
répondu kevpie 2010-12-10 07:17:41

Dans Python 2.7 et supérieur, vous pouvez utiliser la compréhension du dictionnaire: C'est un exemple que j'ai rencontré lors de la lecture D'un CSV en utilisant un DictReader. L'utilisateur avait suffixé tous les noms de colonnes avec': '

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

Pour se débarrasser de la fin': 'dans les clés:

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

17
répondu Ward 2018-05-08 07:57:02

Puisque les clés sont ce que les dictionnaires utilisent pour rechercher des valeurs, vous ne pouvez pas vraiment les changer. La chose la plus proche que vous pouvez faire est d'enregistrer la valeur associée à l'ancienne clé, de la supprimer, puis d'ajouter une nouvelle entrée avec la clé de remplacement et la valeur enregistrée. Plusieurs des autres réponses illustrent différentes façons d'y parvenir.

5
répondu martineau 2011-01-03 14:45:02

Aucun moyen direct pour ce faire, mais vous pouvez le supprimer puis assigner

d = {1:2,3:4}

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

Ou faire des changements de clé de masse:

d = dict((changeKey(k), v) for k, v in d.items())
3
répondu AndiDog 2010-12-10 07:13:27

Si vous avez un dict complexe, cela signifie qu'il y a un dict ou une liste dans le dict:

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'}}
3
répondu Hatem 2016-06-12 02:20:47

Pour convertir toutes les clés dans le dictionnaire

Supposons que c'est votre dictionnaire:

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

Pour convertir tous les tirets en traits de soulignement dans l'exemple de clé du dictionnaire:

>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}
2
répondu Pranjal Singi 2018-03-15 23:53:17

Vous pouvez associer la même valeur à plusieurs clés, ou simplement supprimer une clé et ré-ajouter une nouvelle clé avec la même valeur.

Par exemple, si vous avez des clés - > valeurs:

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

Il n'y a aucune raison pour que vous ne puissiez pas ajouter purple->2 ou supprimer red->1 et ajouter orange->1

0
répondu DGH 2010-12-10 07:12:32

En cas de changement de toutes les clés à la fois. Ici, je suis stemming les clés.

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
0
répondu Ananth Kumar Vasamsetti 2017-11-30 19:16:29

Je n'ai pas vu cette réponse exacte:

dict['key'] = value

Vous pouvez même le faire pour les attributs d'objet. Faire un dictionnaire en faisant ceci:

dict = vars(obj)

Ensuite, vous pouvez manipuler les attributs d'objet comme vous le feriez avec un dictionnaire:

dict['attribute'] = value
-2
répondu MicahT 2013-08-20 19:50:04