¿Cómo puedo agregar nuevas claves a un diccionario?

Resuelto lfaraone asked hace 15 años • 21 respuestas

¿Cómo agrego una nueva clave a un diccionario existente? No tiene un .add()método.

lfaraone avatar Jun 22 '09 05:06 lfaraone
Aceptado

Crea un nuevo par clave/valor en un diccionario asignando un valor a esa clave

d = {'key': 'value'}
print(d)  # {'key': 'value'}

d['mynewkey'] = 'mynewvalue'

print(d)  # {'key': 'value', 'mynewkey': 'mynewvalue'}

Si la clave no existe, se agrega y apunta a ese valor. Si existe, se sobrescribe el valor actual al que apunta.

Paolo Bergantino avatar Jun 21 '2009 22:06 Paolo Bergantino

Tengo ganas de consolidar información sobre los diccionarios de Python:

Creando un diccionario vacío

data = {}
# OR
data = dict()

Creando un diccionario con valores iniciales

data = {'a': 1, 'b': 2, 'c': 3}
# OR
data = dict(a=1, b=2, c=3)
# OR
data = {k: v for k, v in (('a', 1), ('b',2), ('c',3))}

Insertar/Actualizar un valor único

data['a'] = 1  # Updates if 'a' exists, else adds 'a'
# OR
data.update({'a': 1})
# OR
data.update(dict(a=1))
# OR
data.update(a=1)

Insertar/Actualizar múltiples valores

data.update({'c':3,'d':4})  # Updates 'c' and adds 'd'

Pitón 3.9+:

El operador de actualización |= ahora funciona para diccionarios:

data |= {'c':3,'d':4}

Crear un diccionario combinado sin modificar los originales

data3 = {}
data3.update(data)  # Modifies data3, not data
data3.update(data2)  # Modifies data3, not data2

Pitón 3.5+:

Esto utiliza una nueva característica llamada desempaquetado de diccionario .

data = {**data1, **data2, **data3}

Pitón 3.9+:

El operador de combinación | ahora funciona para diccionarios:

data = data1 | {'c':3,'d':4}

Eliminar elementos en el diccionario

del data[key]  # Removes specific element in a dictionary
data.pop(key)  # Removes the key & returns the value
data.clear()  # Clears entire dictionary

Comprobar si una clave ya está en el diccionario

key in data

Iterar a través de pares en un diccionario

for key in data: # Iterates just through the keys, ignoring the values
for key, value in d.items(): # Iterates through the pairs
for key in d.keys(): # Iterates just through key, ignoring the values
for value in d.values(): # Iterates just through value, ignoring the keys

Crear un diccionario a partir de dos listas

data = dict(zip(list_with_keys, list_with_values))
Yugal Jindle avatar Dec 05 '2011 06:12 Yugal Jindle

Para agregar varias claves simultáneamente, use dict.update():

>>> x = {1:2}
>>> print(x)
{1: 2}

>>> d = {3:4, 5:6, 7:8}
>>> x.update(d)
>>> print(x)
{1: 2, 3: 4, 5: 6, 7: 8}

Para agregar una única clave, la respuesta aceptada tiene menos gastos computacionales.

 avatar Jul 22 '2009 14:07

"¿Es posible agregar una clave a un diccionario de Python después de haberlo creado? No parece tener un método .add()".

Sí, es posible y tiene un método que lo implementa, pero no desea usarlo directamente.

Para demostrar cómo y cómo no usarlo, creemos un dict vacío con el literal dict {}:

my_dict = {}

Mejor práctica 1: notación de subíndices

Para actualizar este dictado con una única clave y valor nuevos, puede usar la notación de subíndice (consulte Asignaciones aquí) que proporciona la asignación de elementos:

my_dict['new key'] = 'new value'

my_dictes ahora:

{'new key': 'new value'}

Mejor Práctica 2: El updatemétodo - 2 maneras

También podemos actualizar el dict con múltiples valores de manera eficiente usando el updatemétodo . Es posible que estemos creando un extra innecesariamente dictaquí, por lo que esperamos que el nuestro dictya haya sido creado y provenga o haya sido utilizado para otro propósito:

my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dictes ahora:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

Otra forma eficaz de hacer esto con el método de actualización es con argumentos de palabras clave, pero como tienen que ser palabras legítimas de Python, no puede tener espacios ni símbolos especiales ni comenzar el nombre con un número, pero muchos consideran que esta es una forma más legible. para crear claves para un dict, y aquí ciertamente evitamos crear un extra innecesario dict:

my_dict.update(foo='bar', foo2='baz')

y my_dictahora es:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 
 'foo': 'bar', 'foo2': 'baz'}

Ahora hemos cubierto tres formas Pythonic de actualizar un archivo dict.


Método mágico __setitem__y por qué se debe evitar

Hay otra forma de actualizar a dictque no deberías usar, que usa el __setitem__método. A continuación se muestra un ejemplo de cómo se podría utilizar el __setitem__método para agregar un par clave-valor a a dicty una demostración del bajo rendimiento de su uso:

>>> d = {}
>>> d.__setitem__('foo', 'bar')
>>> d
{'foo': 'bar'}


>>> def f():
...     d = {}
...     for i in xrange(100):
...         d['foo'] = i
... 
>>> def g():
...     d = {}
...     for i in xrange(100):
...         d.__setitem__('foo', i)
... 
>>> import timeit
>>> number = 100
>>> min(timeit.repeat(f, number=number))
0.0020880699157714844
>>> min(timeit.repeat(g, number=number))
0.005071878433227539

Entonces vemos que usar la notación de subíndice es en realidad mucho más rápido que usar __setitem__. Hacer lo Pythonic, es decir, usar el lenguaje de la forma en que fue diseñado, generalmente es más legible y computacionalmente más eficiente.

Russia Must Remove Putin avatar Nov 29 '2014 23:11 Russia Must Remove Putin
dictionary[key] = value
Jason C avatar Jun 21 '2009 22:06 Jason C

Si desea agregar un diccionario dentro de un diccionario, puede hacerlo de esta manera.

Ejemplo: agregue una nueva entrada a su diccionario y subdiccionario

dictionary = {}
dictionary["new key"] = "some new entry" # add new dictionary entry
dictionary["dictionary_within_a_dictionary"] = {} # this is required by python
dictionary["dictionary_within_a_dictionary"]["sub_dict"] = {"other" : "dictionary"}
print (dictionary)

Producción:

{'new key': 'some new entry', 'dictionary_within_a_dictionary': {'sub_dict': {'other': 'dictionarly'}}}

NOTA: Python requiere que primero agregue un sub

dictionary["dictionary_within_a_dictionary"] = {}

antes de agregar entradas.

Asher avatar Apr 26 '2012 19:04 Asher