Quiero cambiar la clave de una entrada en un diccionario de Python.
¿Hay una manera directa de hacer esto?
Quiero cambiar la clave de una entrada en un diccionario de Python.
¿Hay una manera directa de hacer esto?
Respuestas:
Fácilmente hecho 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 aumentará KeyError
si dictionary[old_key]
no está definido. Tenga en cuenta que esto se eliminará 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
dict[new_value] = dict.pop(old_value, some_default_value)
para evitar eso
old_key
será diferente de la posición de new_key
.
si quieres 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 clave: puede ir con cualquiera de las sugerencias anteriores.
{ d1[key] : value for key, value in d.items() }
En Python 2.7 y superior, puede usar la comprensión del diccionario: este es un ejemplo que encontré al leer un CSV usando un DictReader. El usuario había sufijado todos los nombres de columna con ':'
ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}
para deshacerse del ':' final en las teclas:
corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }
Como las claves son las que usan los diccionarios para buscar valores, realmente no puede cambiarlas. Lo más cercano que puede hacer es guardar el valor asociado con la clave anterior, eliminarlo y luego agregar una nueva entrada con la clave de reemplazo y el valor guardado. Varias de las otras respuestas ilustran diferentes maneras en que esto se puede lograr.
Para convertir todas las claves en el diccionario
Supongamos que este es su diccionario:
>>> sample = {'person-id': '3', 'person-name': 'Bob'}
Para convertir todos los guiones a guiones bajos en la clave de diccionario de muestra:
>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}
d = {1:2,3:4}
supongamos que queremos cambiar las claves de los elementos de la lista p = ['a', 'b']. hará el siguiente código:
d=dict(zip(p,list(d.values())))
y obtenemos
{'a': 2, 'b': 4}
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
No he visto esta respuesta exacta:
dict['key'] = value
Incluso puede hacer esto para atributos de objeto. Conviértalos en un diccionario haciendo esto:
dict = vars(obj)
Luego puede manipular los atributos del objeto como lo haría con un diccionario:
dict['attribute'] = value