web-dev-qa-db-fra.com

Changer le nom d'une clé dans le dictionnaire

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

Y at-il un moyen simple de faire cela?

257
user469652

Facilement fait 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 augmentera KeyError si dictionary[old_key] n'est pas défini. Notez que ceci 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
516
marcog

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 de clé unique: Vous pouvez aller avec l'une des suggestions ci-dessus.

46
Tauquir

pop'n'fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 
27
kevpie

Dans python2.7 et versions ultérieures, vous pouvez utiliser la compréhension par dictionnaire: voici un exemple rencontré lors de la lecture d'un fichier CSV à l'aide d'un lecteur DictReader. L'utilisateur avait suffixé tous les noms de colonne avec ':'

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

se débarrasser du ':' en fin de phrase dans les clés:

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

22
Ward

Les clés étant ce que les dictionnaires utilisent pour rechercher des valeurs, vous ne pouvez pas vraiment les changer. La chose la plus proche que vous puissiez faire est de sauvegarder 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 manières d’y parvenir.

6
martineau

Pas de moyen direct de le faire, mais vous pouvez supprimer-puis-assigner

d = {1:2,3:4}

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

ou faites-vous des changements de clé en masse:

d = dict((changeKey(k), v) for k, v in d.items())
3
AndiDog

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
Hatem

Pour convertir toutes les clés du dictionnaire

Supposons que ceci soit votre dictionnaire:

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

Pour convertir tous les tirets en traits de soulignement dans la clé de dictionnaire exemple:

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

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

Par exemple, si vous avez key-> values:

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
DGH

En cas de changement de toutes les clés en même temps, je m'arrête ici.

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
d = {1:2,3:4}

supposons que nous voulions changer les clés des éléments de la liste p = ['a', 'b'] . le code suivant fera:

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

et nous obtenons

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