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?
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
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.
Pop'n'Fresh
>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>>
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() }
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.
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())
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'}}
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'}
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
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
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