2010-12-10 11 views

Respuesta

372

hacer fácilmente en 2 pasos:

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

O en 1 paso:

dictionary[new_key] = dictionary.pop(old_key) 

que elevará KeyError si dictionary[old_key] no está definido. Tenga en cuenta que borrará 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

Esto elevará un KeyError de cualquier manera si la clave no está vigente , pero podría usar 'dict [new_value] = dict.pop (old_value, some_default_value)' para evitar eso –

0

Puede asociar el mismo valor con muchas teclas, o simplemente eliminar una clave y volver a agregar una nueva clave con el mismo valor.

Por ejemplo, si usted tiene keys-> valores:

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

no hay razón por la que no se puede agregar o eliminar purple->2red->1 y añadir orange->1

3

hay forma directa de hacer esto, pero puede eliminar, entonces asignar

d = {1:2,3:4} 

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

o hacer cambios importantes en masa:

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 desea cambiar todas las claves:

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 desea cambiar una sola tecla: Usted puede ir con cualquiera de las anteriores sugerencia.

+2

Esto crea un nuevo diccionario en lugar de actualizar uno existente, que puede no ser importante, pero no es lo que se pidió . – martineau

+9

La misma respuesta con la comprensión de un diccionario: '{d1 [clave]: valor de la clave, valor en d.items()}' – Morwenn

4

Dado que las claves son los diccionarios que se usan para buscar valores, no se puede cambiar. Lo más cercano que puede hacer es guardar el valor asociado con la clave anterior, eliminarla, luego agregar una nueva entrada con la clave de reemplazo y el valor guardado. Varias de las otras respuestas ilustran diferentes formas en que esto se puede lograr.

-2

No he visto esta respuesta exacta:

dict['key'] = value 

incluso se puede hacer esto a los atributos del objeto. convertirlos en un diccionario al hacer esto:

dict = vars(obj) 

Entonces se puede manipular los atributos del objeto como si fuera un diccionario:

dict['attribute'] = value 
+0

No veo cómo se relaciona esto con la pregunta; podrías por favor elaborar? – apraetor

15

en Python 2.7 y superior, puede utilizar la comprensión diccionario: Este es un ejemplo que encontré al leer un CSV usando un DictReader.El usuario había sufijo todos los nombres de columna con ':'

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

para deshacerse del terminador ':' en las claves:

corrected_dict = { x.replace(':', ''): ori_dict[x] for x in ori_dict.keys() }

+0

"AttributeError: el objeto 'dict' no tiene ningún atributo 'replace'" – user1318135

+1

user1318125, yo sugeriría intentar copiar pegar. Esto funciona para mí en la consola de python (el .replace se está ejecutando en la cadena que se utiliza como clave) –

1

Si usted tiene un dict compleja, significa que hay un dict o lista dentro del 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 caso de cambiar todas las claves a la vez. Aquí estoy derivando las llaves.

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 
Cuestiones relacionadas