Je souhaite modifier la clé d'une entrée dans un dictionnaire Python.Modifier le nom d'une clé dans le dictionnaire
Existe-t-il un moyen simple de le faire?
Je souhaite modifier la clé d'une entrée dans un dictionnaire Python.Modifier le nom d'une clé dans le dictionnaire
Existe-t-il un moyen simple de le faire?
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 soulèvera KeyError
si dictionary[old_key]
est définie. 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
Cela soulèvera une KeyError de toute façon si la clé n'existant , mais vous pouvez utiliser 'dict [nouvelle_valeur] = dict.pop (ancienne_valeur, certaine_valeur_de_valide)' pour éviter cela –
Vous pouvez associer la même valeur avec de nombreuses touches, ou tout simplement retirer une clé et rajoutez une nouvelle clé avec la même valeur.
Par exemple, si vous avez keys> Valeurs:
red->1
blue->2
green->4
il n'y a aucune raison que vous ne pouvez pas ajouter ou supprimer purple->2
red->1
et ajouter orange->1
aucun moyen direct pour ce faire, mais vous peut supprimer, alors assigner
d = {1:2,3:4}
d[newKey] = d[1]
del d[1]
ou faire des changements clés de masse:
d = dict((changeKey(k), v) for k, v in d.items())
pop'n'fresh
>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>>
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 seule touche: Vous pouvez aller avec tout de ce qui précède suggestion.
Étant donné que les clés sont ce que les dictionnaires utilisent pour rechercher des valeurs, vous ne pouvez pas vraiment les modifier. La chose la plus proche que vous pouvez faire est de sauvegarder la valeur associée à l'ancienne clé, supprimez-la, puis ajoutez 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.
Je ne l'ai pas vu cette réponse exacte:
dict['key'] = value
Vous pouvez même le faire pour attributs des objets. Faites-les dans un dictionnaire en faisant ceci:
dict = vars(obj)
Ensuite, vous pouvez manipuler les attributs d'objets comme vous le feriez un dictionnaire:
dict['attribute'] = value
Je ne vois pas comment cela est lié à la question; pourriez-vous élaborer, s'il vous plaît? – apraetor
En Python 2.7 et plus, vous pouvez utiliser la compréhension dictionnaire: C'est un exemple que j'ai rencontré en lisant un fichier 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 fuite « : » dans les clés:
corrected_dict = { x.replace(':', ''): ori_dict[x] for x in ori_dict.keys() }
"AttributeError: l'objet 'dict' n'a pas d'attribut 'replace'" – user1318135
user1318125, je suggère d'essayer de copier coller. Cela fonctionne pour moi dans la console python (le .replace est en cours d'exécution sur la chaîne utilisée comme clé) –
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'}}
En cas de changement de toutes les touches à la fois. Ici, j'arrache 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
** Voir aussi **: http://stackoverflow.com/questions/30720673/renaming-the-keys-of-a-dictionary – dreftymac