Quiero cambiar la clave de una entrada en un diccionario de Python.Cambiar el nombre de una clave en el diccionario
¿Hay una manera directa de hacerlo?
Quiero cambiar la clave de una entrada en un diccionario de Python.Cambiar el nombre de una clave en el diccionario
¿Hay una manera directa de hacerlo?
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
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 –
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->2
red->1
y añadir orange->1
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())
pop'n'fresh
>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>>
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.
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.
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
No veo cómo se relaciona esto con la pregunta; podrías por favor elaborar? – apraetor
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() }
"AttributeError: el objeto 'dict' no tiene ningún atributo 'replace'" – user1318135
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) –
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'}}
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
** ** Ver también: http://stackoverflow.com/questions/30720673/renaming-the-keys-of-a-dictionary – dreftymac