¿Cómo puedo agregar nuevas claves a un diccionario?
¿Cómo agrego una nueva clave a un diccionario existente? No tiene un .add()
método.
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.
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))
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.
"¿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_dict
es ahora:
{'new key': 'new value'}
Mejor Práctica 2: El update
método - 2 maneras
También podemos actualizar el dict con múltiples valores de manera eficiente usando el update
método . Es posible que estemos creando un extra innecesariamente dict
aquí, por lo que esperamos que el nuestro dict
ya 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_dict
es 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_dict
ahora 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 dict
que 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 dict
y 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.
dictionary[key] = value
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.