Чому dict.keys () Python повертає список, а не набір?


87

Я би очікував, що метод ключів Python поверне набір замість списку. Оскільки це найбільше нагадує такі гарантії, які дають ключі хеш-карти. Зокрема, вони унікальні і не сортуються, як набір. Однак цей метод повертає список:

>>> d = {}
>>> d.keys().__class__
<type 'list'>

Це просто помилка в API Python чи є якась інша причина, через яку я відсутній?


1
Це вже не так у Python 3. docs.python.org/3/library/stdtypes.html#dict-views
Борис

Відповіді:


99

Одна з причин полягає в тому, що dict.keys()передує введенню наборів у мову.

Зверніть увагу, що тип повернення dict.keys()змінився в Python 3: функція тепер повертає подання, подібне до набору, а не список.

Для безлічі подібних поглядів, всі операції , визначені для абстрактного базового класу collections.abc.Setдоступні (наприклад, ==, <або ^).


6
І це подання замість списку / набору / тощо. тому що рідко потрібно копіювати всі ключі.

31
і ці погляди можна обробляти як set()! які дозволяють dict.keys() | set()операції. Py3 скелі :)
йота

2
Якщо ви застрягли в Py2, ви можете зробити те саме, зателефонувавши dict.viewkeys()та використовуючи його із встановленими операціями |, &...
Tobia
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.