Союз объектов dict в Python
Как вы рассчитываете объединение двух dict
объекты в Python, где (key, value)
пара присутствует в результате, если key
является in
либо диктовать (если нет дубликатов)?
Например, союз {'a' : 0, 'b' : 1}
а также {'c' : 2}
является {'a' : 0, 'b' : 1, 'c' : 2}
,
Предпочтительно вы можете сделать это без изменения любого ввода dict
, Пример того, где это полезно: получить изложение всех переменных, находящихся в настоящее время в области видимости, и их значений
4 ответа
Этот вопрос дает идиому. Вы используете один из диктов в качестве аргументов ключевого слова для dict()
конструктор:
dict(y, **x)
Дубликаты разрешаются в пользу значения в x
; например
dict({'a' : 'y[a]'}, **{'a', 'x[a]'}) == {'a' : 'x[a]'}
Вы также можете использовать update
метод диктовки как
a = {'a' : 0, 'b' : 1}
b = {'c' : 2}
a.update(b)
print a
Если вам нужно, чтобы оба запроса оставались независимыми и обновляемыми, вы можете создать один объект, который запрашивает оба словаря в своем __getitem__
метод (и реализовать get
, __contains__
и другой метод отображения, как вам нужно).
Минималистский пример может быть таким:
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]
И это работает:
>>> 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
>>>
Два словаря
def union2(dict1, dict2):
return dict(list(dict1.items()) + list(dict2.items()))
русский словарь
def union(*dicts):
return dict(itertools.chain.from_iterable(dct.items() for dct in dicts))