recorrer - lista de diccionarios python
UniĆ³n de objetos dict en Python (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo combinar dos diccionarios en una sola expresión? 48 respuestas
¿Cómo se calcula la unión de dos objetos dict
en Python, donde un par (key, value)
está presente en el resultado si la key
está in
cualquiera in
dos términos (a menos que haya duplicados)?
Por ejemplo, la unión de {''a'' : 0, ''b'' : 1}
y {''c'' : 2}
es {''a'' : 0, ''b'' : 1, ''c'' : 2}
.
Preferiblemente puede hacer esto sin modificar cualquiera de las entradas dict
. Ejemplo de dónde esto es útil: Obtenga un dict de todas las variables actualmente en alcance y sus valores
Si necesita ambos dicts para mantenerse independiente y actualizable, puede crear un solo objeto que consulte ambos diccionarios en su método __getitem__
(e implemente get
, __contains__
y otro método de mapeo cuando 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
>>>
También puedes usar el método de update
de dict like
a = {''a'' : 0, ''b'' : 1}
b = {''c'' : 2}
a.update(b)
print a
Esta pregunta proporciona una expresión idiomática. Utiliza uno de los dicts 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]''}
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))