2010-12-10 46 views

Répondre

372

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 
+23

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 –

0

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->2red->1 et ajouter orange->1

3

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

pop'n'fresh

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

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.

+2

Cela crée un nouveau dictionnaire plutôt que de mettre à jour un dictionnaire existant - ce qui peut ne pas être important, mais ce n'est pas ce qui a été demandé . – martineau

+9

Même réponse avec une compréhension du dictionnaire: '{d1 [clé]: valeur pour clé, valeur dans d.items()}' – Morwenn

4

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

-2

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 
+0

Je ne vois pas comment cela est lié à la question; pourriez-vous élaborer, s'il vous plaît? – apraetor

15

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

+0

"AttributeError: l'objet 'dict' n'a pas d'attribut 'replace'" – user1318135

+1

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é) –

1

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

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