Пример для иллюстрации:
>>> a = dict(eggs='eggs', spam='spam')
>>> b = dict(spam='spam', ham='ham')
>>> dict(a.items() | b.items())
{'eggs': 'eggs', 'ham': 'ham', 'spam': 'spam'}
В то же время...
>>> dict(a.items() + b.items())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict_items' and 'dict_items'
Для этого есть причина? Не было бы разумным предположить, что дополнение и союз должны делать то же самое для словарей?
В Python 2 это отлично работает:
>>> dict(a.items() + b.items())
{'eggs': 'eggs', 'ham': 'ham', 'spam': 'spam'}
Хотя в Python 2 .items()
возвращает обычный список (в отличие от dict_items
), возможно, это случайно.
Наконец, я не думаю, "что произойдет, если ключи имеют разные значения" -dilemma применяется здесь как оператор |
похоже, не имеет никакого значения (одно из двух значений выбрано, по-видимому, случайным образом).
Некоторые виды dict
(в частности, not dict.values
) поддерживают операции набора. +
не является заданной операцией, поэтому нет реальной причины, по которой она должна быть включена.
-
поддерживается. Вот почему это казалось противоречивым для меня.
set
твою поддержку -
как разницу . Они делают это, потому что это существующая математическая запись.
Вернемся к самой простой мантре Python: Zen of Python.
Должен быть one-- и желательно только один способ --obvious.
Поэтому вы спрашиваете, почему +
не следует определять, чтобы сделать то же самое, что |
, Ваш ответ прямо там: было бы два одинаково правильных способа сделать то же самое, что не было бы Pythonic.
Просто чтобы добавить бит в ответ dict_items
объект dict_items
является подклассом collections.Set
dict_items
from collections.abc import Set
isinstance(d.items(), Set) # True
и Set
не имеет операции +
:
'__add__' in dir(Set) # False