Unión de objetos dict en Python [duplicado]
Esta pregunta ya tiene una respuesta aquí:
- Cómo combinar dos diccionarios en una sola expresión? 49 respuestas
¿Cómo se calcula la unión de dos objetos dict
en Python, donde un par (key, value)
está presente en el resultado iff key
es in
ya sea dict (a menos que haya duplicados)?
Por ejemplo, la unión de {'a' : 0, 'b' : 1}
y {'c' : 2}
is {'a' : 0, 'b' : 1, 'c' : 2}
.
Preferiblemente puede hacer esto sin modificar ninguna entrada dict
. Ejemplo de donde esto es útil: Obtener un dict de todas las variables actualmente en el ámbito y sus valores
4 answers
Esta pregunta proporciona un modismo. Se usa uno de los dictados como argumentos de palabra clave para el constructor dict()
:
dict(y, **x)
Los duplicados se resuelven a favor del valor en x
; por ejemplo
dict({'a' : 'y[a]'}, **{'a', 'x[a]'}) == {'a' : 'x[a]'}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:00
También puede utilizar update
método de dict como
a = {'a' : 0, 'b' : 1}
b = {'c' : 2}
a.update(b)
print a
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-22 09:54:27
Dos diccionarios
def union2(dict1, dict2):
return dict(list(dict1.items()) + list(dict2.items()))
n diccionarios
def union(*dicts):
return dict(itertools.chain.from_iterable(dct.items() for dct in dicts))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-02 18:19:57
Si necesita que ambos dictos permanezcan independientes y actualizables, puede crear un único objeto que consulte ambos diccionarios en su método __getitem__
(e implementar get
, __contains__
y otro método de asignación según los necesite).
Un ejemplo minimalista podría ser así:
class UDict(object):
def __init__(self, d1, d2):
self.d1, self.d2 = d1, d2
def __getitem__(self, item):
if item in self.d1:
return self.d1[item]
return self.d2[item]
Y funciona:
>>> a = UDict({1:1}, {2:2})
>>> a[2]
2
>>> a[1]
1
>>> a[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in __getitem__
KeyError: 3
>>>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-22 11:24:26