В Python 3.7 я хотел бы рассчитать пересечение ключей двух словарей. Для этого я бы хотел вызвать метод .intersection()
на их keys()
, однако он не работает.
.keys () создает объект, подобный множеству, однако большинство методов множества не работают с ним. Однако работают крайне неизвестные побитовые операторные перегрузки для объектов, подобных множеству, например &
.
m = {'a':1, 'b':2}
n = {'b':3, 'c':4}
m.keys().intersection(n.keys()) # Pythonic, but doesn't work
m.keys() & n.keys() # works but not readable
set(m.keys()).intersection(set(n.keys())) # works, readable, but too verbose
Я считаю, что перегрузка &
для подобного множеству объекта используется крайне редко и не известна большинству программистов. Имена методов, такие как .intersection()
или .union()
, являются самодокументируемыми и определенно более Pythonic по этому определению.
Почему тогда не поддерживается? Даже в документации перечислены методы &
и .intersection()
, такие как псевдонимы, не говоря уже о том, что для объектов, подобных множеству, поддерживается только &
.
примечание: По какой-то причине в IPython автозаполнение перечисляет .isdisjoin()
в качестве метода, доступного для dict.keys()
. Из 17 заданных методов 1 присутствует.