TypeError: неподдерживаемый тип операндов для +: 'dict_items' и 'dict_items'

Я пытаюсь суммировать два словаря:

my_new_dict = dict(my_existing_dict.items() + my_new_dict.items())

но получить ошибку

TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'

Что я делаю неправильно?

Ответ 1

В python3, dict.items() возвращает объект с типом dict_items, который, по-видимому, не может быть добавлен. (в python 2 он возвратил list, который можно было добавить).

Альтернативный способ добавить пару словарей, которые работают на py2k и py3k:

d = dict1.copy()
d.update(dict2)

Конечно, есть некоторая двусмысленность в отношении того, что вы хотите совершить в случае ключевых столкновений. например если оба dicts имеют key1, чей key1 должен быть сохранен на выходе? Или вы должны использовать некоторую комбинацию обоих своих значений? В последнем случае вы, вероятно, захотите что-то из модуля collections (либо defaultdict, либо Counter)

Ответ 2

Первая проблема заключается в том, что это двусмысленно - словари не могут иметь повторяющиеся ключи, поэтому неясно, что вы имеете в виду, что должно произойти, если оба содержат один и тот же ключ?

Основная проблема здесь заключается в том, что словарные представления заданы как, поэтому они не имеют добавленного дополнения.

Что вы, возможно, захотите, это union: d1.items() | d2.items(), который даст вам набор кортежей (key, value). Если вы затем передадите его на dict() и будут дубликаты, последнее значение будет использовано.

Итак, короче:

dict(d1.items() | d2.items())