2015-02-27 5 views
5

collections.OrderedDict В документации описан анализ OrderedDict в видеOrderedDict: заказываемые значения тоже?

в Dict, который запоминает порядок, в котором ключи были впервые вставленный

поэтому порядок

for k in dict: 
    ... 

for k in dict.keys(): 
    ... 

предсказуем.

Однако он ничего не говорит о значениях. Если мне нужно только перебирать значения следующим образом, будут ли результаты равномерно упорядочены по вставке?

for v in dict.values(): 
    ... 

Несколько быстрых тестов здесь, в CPython показал, что имеет место, но это может быть просто coinicidental с текущей реализации (я не проверял любые другие).

ответ

7

Да, списки по keys() и values() оформлены в соответствующих порядке во всех dicts, not just in ordered ones. (Порядок произволен для нормальной dicts, но это то же произвольны keys(), values() и items() порядка, если ДИКТ не был изменен в то же время.)

2

Да, они сортируются в том же порядке, как ключи. Это то же самое со всеми реализациями dict.

ключи и значения итерации в произвольном порядке, который неслучайное, различается по реализации Python, и зависит от истории словаря вставок и удалений. Если ключи, значения и элементы просматриваются без повторных изменений в словаре , порядок элементов будет соответствовать непосредственно. Это позволяет создавать пары (value, key) с использованием zip(): pairs = zip(d.values(), d.keys()). Другой способ создать тот же список: pairs = [(v, k) for (k, v) in d.items()].

https://docs.python.org/3/library/stdtypes.html#dict-views

Смежные вопросы