¿Es posible agregar una clave a un diccionario de Python después de que se haya creado?
No parece tener un .add()
método.
python
dictionary
lookup
lfaraone
fuente
fuente
{**mydict, 'new_key': new_val}
.Respuestas:
fuente
.update()
método? ¿Cuál es mejor cuando?d[key]=val
sintaxis, ya que es más corta y puede manejar cualquier objeto como clave (siempre que sea hashable), y solo establece un valor, mientras que.update(key1=val1, key2=val2)
es mejor si desea establecer varios valores al mismo tiempo, siempre que las claves son cadenas (ya que los kwargs se convierten en cadenas).dict.update
también puede tomar otro diccionario, pero personalmente prefiero no crear explícitamente un nuevo diccionario para actualizar otro.$foo[ ] = [ . . . . ]
Para agregar varias claves simultáneamente, use
dict.update()
:Para agregar una sola clave, la respuesta aceptada tiene menos sobrecarga computacional.
fuente
x[-1] = 44
el-1
valor también está al final. De todos modos la respuesta ha sido editada y ahora es mucho mejor. Actualizar con un diccionario es bueno cuando es probable que contenga muchos elementos.Tengo ganas de consolidar información sobre los diccionarios Python:
Crear un diccionario vacío
Crear un diccionario con valores iniciales
Insertar / Actualizar un solo valor
Insertar / Actualizar múltiples valores
Crear un diccionario combinado sin modificar originales
Eliminar elementos en el diccionario
Compruebe si una clave ya está en el diccionario
Iterar a través de pares en un diccionario
Crea un diccionario a partir de dos listas
Nuevo en Python 3.5
Crear un diccionario combinado sin modificar originales:
Esto utiliza un nuevo featrue llamado diccionario desempaquetado .
Nuevo en Python 3.9
Actualizar o agregar valores para un diccionario existente
El operador de actualización
|=
ahora funciona para los diccionarios:Crear un diccionario combinado sin modificar originales
El operador de combinación
|
ahora funciona para los diccionarios:¡Siéntase libre de agregar más!
fuente
Sí, es posible, y tiene un método que implementa esto, pero no desea usarlo directamente.
Para demostrar cómo y cómo no usarlo, creemos un dict vacío con el literal dict
{}
:Mejor práctica 1: notación de subíndice
Para actualizar este dict con una sola clave y valor nuevos, puede usar la notación de subíndice (consulte Asignaciones aquí) que proporciona la asignación de elementos:
my_dict
es ahora:Mejor práctica 2: El
update
método - 2 formasTambién podemos actualizar el dict con múltiples valores de manera eficiente también mediante el
update
método . Es posible quedict
estemos creando innecesariamente un extra aquí, por lo que esperamos que el nuestrodict
ya haya sido creado y provenga o haya sido utilizado para otro propósito:my_dict
es ahora:Otra forma eficiente de hacer esto con el método de actualización es con argumentos de palabras clave, pero dado que tienen que ser palabras legítimas de Python, no puede tener espacios o símbolos especiales o comenzar el nombre con un número, pero muchos consideran que es una forma más legible para crear claves para un dict, y aquí ciertamente evitamos crear un innecesario adicional
dict
:y
my_dict
ahora es:Así que ahora hemos cubierto tres formas pitónicas de actualizar a
dict
.Método mágico
__setitem__
y por qué debería evitarseHay otra forma de actualizar una
dict
que no deberías usar, que usa el__setitem__
método. Aquí hay un ejemplo de cómo se podría usar el__setitem__
método para agregar un par clave-valor a undict
, y una demostración del bajo rendimiento de su uso:Entonces vemos que usar la notación de subíndice es en realidad mucho más rápido que usarlo
__setitem__
. Hacer lo Pythonic, es decir, usar el lenguaje de la manera en que se pretendía usar, generalmente es más legible y computacionalmente eficiente.fuente
d.__setitem__
), aunque la conclusión (y especialmente la última oración) sigue siendo sólida. Levantar la búsqueda del nombre del método fuera del ciclo redujo el tiempo a aproximadamente 1.65 ms; la diferencia restante probablemente se deba en gran medida a la inevitable sobrecarga del mecanismo de llamada de Python.fuente
Si desea agregar un diccionario dentro de un diccionario, puede hacerlo de esta manera.
Ejemplo: Agregue una nueva entrada a su diccionario y sub diccionario
Salida:
NOTA: Python requiere que primero agregue un sub
antes de agregar entradas.
fuente
dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}}
(o sidictionary
ya es un dict,dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}
)La sintaxis ortodoxa es
d[key] = value
, pero si a su teclado le faltan las teclas de corchetes, puede hacer:De hecho, definiendo
__getitem__
y__setitem__
métodos es cómo puede hacer que su propia clase admita la sintaxis de corchetes. Ver https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_oriented_framework/special_class_methods.phpfuente
[a for a in my_dict if my_dict.update({'a': 1}) is None]
.{v: k for k, v in my_dict.items() if <some_conditional_check>}
Puedes crear uno:
Da:
fuente
Esta popular pregunta aborda métodos funcionales de fusión de diccionarios
a
yb
.Estos son algunos de los métodos más directos (probados en Python 3) ...
Nota: El primer método anterior solo funciona si las claves
b
son cadenas.Para agregar o modificar un solo elemento , el
b
diccionario contendría solo ese elemento ...Esto es equivalente a ...
fuente
c = dict( a, **{'d':'dog'} )
sería mejor escribirloc = dict(a, d='dog')
, siempre que las claves sean conocidas y no se calculen.Supongamos que desea vivir en el mundo inmutable y NO desea modificar el original, pero desea crear uno nuevo
dict
que sea el resultado de agregar una nueva clave al original.En Python 3.5+ puedes hacer:
El equivalente de Python 2 es:
Después de cualquiera de estos:
params
sigue siendo igual a{'a': 1, 'b': 2}
y
new_params
es igual a{'a': 1, 'b': 2, 'c': 3}
Habrá ocasiones en que no desee modificar el original (solo desea el resultado de agregarlo al original). Me parece una alternativa refrescante a lo siguiente:
o
Referencia: https://stackoverflow.com/a/2255892/514866
fuente
**
Python (muchos no lo están), entonces no será obvio lo que está sucediendo. Hay momentos en que favorecerá un enfoque menos funcional para una mejor legibilidad.Tantas respuestas y aún así todos se olvidaron de los nombres extraños, de comportamiento extraño, y aún así útiles.
dict.setdefault()
Esta
básicamente solo hace esto:
p.ej
fuente
Si no está uniendo dos diccionarios, pero está agregando nuevos pares clave-valor a un diccionario, entonces usar la notación de subíndice parece ser la mejor manera.
Sin embargo, si desea agregar, por ejemplo, miles de nuevos pares clave-valor, debería considerar usar el
update()
método.fuente
Creo que también sería útil señalar el
collections
módulo de Python que consta de muchas subclases de diccionario y envoltorios útiles que simplifican la adición y modificación de tipos de datos en un diccionario , específicamentedefaultdict
:Esto es particularmente útil si está trabajando con diccionarios que siempre consisten en los mismos tipos de datos o estructuras, por ejemplo, un diccionario de listas.
Si la clave aún no existe,
defaultdict
asigna el valor dado (en nuestro caso10
) como valor inicial al diccionario (a menudo utilizado dentro de los bucles). Por lo tanto, esta operación hace dos cosas: agrega una nueva clave a un diccionario (según la pregunta) y asigna el valor si la clave aún no existe. Con el diccionario estándar, esto habría generado un error ya que la+=
operación está intentando acceder a un valor que aún no existe:Sin el uso de
defaultdict
, la cantidad de código para agregar un nuevo elemento sería mucho mayor y quizás se parece a:defaultdict
también se puede usar con tipos de datos complejos comolist
yset
:Agregar un elemento automáticamente inicializa la lista.
fuente
Aquí hay otra forma que no vi aquí:
Puede usar el constructor de diccionario y la expansión implícita para reconstruir un diccionario. Además, curiosamente, este método puede usarse para controlar el orden posicional durante la construcción del diccionario ( posterior a Python 3.6 ). De hecho, ¡el orden de inserción está garantizado para Python 3.7 y superior!
Lo anterior está utilizando la comprensión del diccionario.
fuente
primero para verificar si la clave ya existe
entonces puede agregar la nueva clave y valor
fuente
agregar clave de diccionario, clase de valor.
fuente