Какой PEP управляет порядком dict.values ​​()? - PullRequest
1 голос
/ 14 мая 2009

Когда вы вызываете dict.values ​​(), порядок возвращаемых элементов зависит от значения ключа has. Это выглядит очень согласованно во всех версиях cPython, однако в руководстве по python для dict просто говорится, что порядок «произвольный» .

Я помню, как где-то читал, что на самом деле есть PEP, в котором конкретно указывается ожидаемый порядок методов items () и values ​​().

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

Ответы [ 3 ]

7 голосов
/ 14 мая 2009

С http://docs.python.org/library/stdtypes.html:

Ключи и значения указаны в произвольный порядок, который не является случайным, варьируется в зависимости от реализации Python, и зависит от словаря история вставок и удалений.

6 голосов
/ 14 мая 2009

Полагаю, PEP-3106 настолько близко, насколько это возможно:

Спецификация подразумевает, что порядок, в котором товары возвращаются .keys (), .values ​​() и .items () - это то же самое (как это было в Python 2.x), потому что порядок все происходит от диктатор dict (который предположительно произвольно, но стабильно, пока дикт не изменяется). Это можно выразить следующим инвариантом:

list(d.items()) == list(zip(d.keys(), d.values()))

2 голосов
/ 14 мая 2009

«Произвольный» - это не то же самое, что «Случайный».

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

Для гарантии заказа вы используете функцию sorted.

Или вы можете найти хорошую упорядоченную словару реализацию, которую вы хотите использовать вместо dict.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...