Почему методы set, такие как .intersection (), не поддерживаются в объектах, похожих на set?

hyperknot спросил: 07 октября 2018 в 12:29 в: python

В Python 3.7 я хотел бы рассчитать пересечение ключей двух словарей. Чтобы сделать это, я хотел бы вызвать метод .intersection() для их keys(), однако он не работает.

.keys () производит set- как объект, однако большинство методов набора не работают с ним. Однако то, что работает, - это крайне неизвестные побитовые операторные перегрузки для объектов, подобных множеству, таких как &.

m = {'a':1, 'b':2}
n = {'b':3, 'c':4}m.keys().intersection(n.keys())  # Pythonic, but doesn't workm.keys() & n.keys()  # works but not readableset(m.keys()).intersection(set(n.keys()))  # works, readable, but too verbose

Я считаю, что & Перегрузка на подобный множеству объект чрезвычайно редко используется и не известна большинству программистов. Имена методов, такие как .intersection() или .union(), являются самодокументируемыми и определенно более Pythonic по этому определению.

Почему тогда они не поддерживаются? Даже в документации перечислены методы & и .intersection(), такие как псевдонимы, не говоря уже о том, что для объектов, подобных множеству, поддерживается только &.

note: По какой-то причине в IPython автозаполнение перечисляет .isdisjoin() как метод, который доступен в dict.keys(). Из 17 заданных методов 1 присутствует.

0 ответов