python3: сумма (объединение) словарей с операндом «+» вызывает исключение - PullRequest
2 голосов
/ 17 августа 2011

Я бы хотел избежать метода update (), и я прочитал, что можно объединить два словаря в третий словарь с помощью операнда «+», но в моей оболочке происходит следующее:

>>> {'a':1, 'b':2}.items() + {'x':98, 'y':99}.items()
Traceback (most recent call last):
  File "<pyshell#84>", line 1, in <module>
    {'a':1, 'b':2}.items() + {'x':98, 'y':99}.items()
TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'
>>> {'a':1, 'b':2} + {'x':98, 'y':99}
Traceback (most recent call last):
  File "<pyshell#85>", line 1, in <module>
    {'a':1, 'b':2} + {'x':98, 'y':99}
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'

Как мне заставить это работать?

Ответы [ 2 ]

8 голосов
/ 17 августа 2011
dicts = {'a':1, 'b':2}, {'x':98, 'y':99}
new_dict = dict(sum(list(d.items()) for d in dicts, []))

или

new_dict = list({'a':1, 'b':2}.items()) + list({'x':98, 'y':99}.items())

В Python 3 items не возвращает list, как в Python 2, но dict view . Если вы хотите использовать +, вам нужно конвертировать их в list s.

Вам лучше использовать update с или без copy:

# doesn't change the original dicts
new_dict = {'a':1, 'b':2}.copy()
new_dict.update({'x':98, 'y':99})
7 голосов
/ 04 октября 2016

Начиная с Python 3.5, идиома:

{**dict1, **dict2, ...}

https://www.python.org/dev/peps/pep-0448/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...