Los diccionarios son una de las estructuras de datos fundamentales en Python. Se utilizan en muchas partes del lenguaje y se han optimizado bastante con el tiempo.

Hay varias formas de combinar dos diccionarios. Sin embargo, la sintaxis es un poco críptica o engorrosa:

Ambos métodos combinan los diccionarios sin cambiar los datos originales. Tenga en cuenta que “Cleveland” ha sido sobrescrito por “Edimburgo” en fusionado. También puede actualizar un diccionario en su lugar:

Sin embargo, esto cambia tu diccionario original. Recuerde que .update() no devuelve el diccionario actualizado, por lo que los intentos inteligentes de usar .update() sin modificar los datos originales no funcionan tan bien:

Observe que el resultado de merged es None, y aunque los dos diccinarios se fusionaron, ese resultado se ha descartado. Puede utilizar el operador := que se agrego en Python 3.8 para hacer que esto funcione:

Aún así, esta no es una solución particularmente legible o satisfactoria.

Basada en PEP 584, la nueva versión de Python presenta dos nuevos operadores para diccionarios: unión (|) y actualización (| =). Puede utilizar | para fusionar dos diccionarios, mientras que |= actualizará un diccionario en su lugar:

Si d1 y d2 son dos diccionarios, entonces d1 | d2 hace lo mismo que {**d1, **d2}. El | El operador se utiliza para calcular la unión de sets, por lo que la notación puede que ya le resulte familiar.

Una ventaja de usar | es que funciona en diferentes tipos de diccionarios y mantiene el tipo a través de la combinación:

Puede utilizar un defaultdict cuando desee gestionar eficazmente las claves que faltan. Tenga en cuenta que | conserva el defaultdict, mientras que {** europa, ** africa} no lo hace.

Hay algunas similitudes entre cómo | funciona para diccionarios y cómo + funciona para listas. De hecho, el operador + se propuso originalmente también para fusionar diccionarios. Esta correspondencia se vuelve aún más evidente cuando observa el operador in situ.

El uso básico de |= es actualizar un diccionario en su lugar, similar a .update():

Cuando fusiona diccionarios con |, ambos diccionarios deben ser del mismo tipo de diccionario. Por otro lado, el operador de actualización (|=) está feliz de trabajar con cualquier estructura de datos similar a un diccionario:

Los operadores | y |= se han agregado no solo a los diccionarios regulares sino también a muchas clases similares a diccionarios, incluidas UserDict, ChainMap, OrderedDict, defaultdict, WeakKeyDictionary, WeakValueDictionary, _Environ y MappingProxyType. No se han agregado a las clases base abstractas Mapping o MutableMapping. El contenedor Counter ya usa | para encontrar recuentos máximos. Esto no ha cambiado.

Puede cambiar el comportamiento de | y |= implementando __o__() y __ior__(), respectivamente. Consulte PEP 584 para obtener más detalles.


Este artículo se basa en Python 3.9 New Features.

Python 3.9: Actualizaciones más sencillas en Diccionarios
Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Etiquetado en:    

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook