Консистенция ключевого значения в словарях python

Это, вероятно, вопрос о нобе. Для любого словаря 'd' в python это всегда True:

dict( zip( d.keys(), d.values() ) ) == d 

Возвращаются ли ключи и значения в том же порядке?

Да, это всегда так. Гарантируется Python, если нет никаких промежуточных модификаций для ditionary.

Соответствующие спецификации: http://docs.python.org/library/stdtypes.html#dict.items

Это лучше, как правило, потому, что он защищает от дикта, выходящего из синхронизации, и использует незначительную дополнительную память:

dict((k,v) for k,v in d.iteritems())

Если вы спрашиваете, возвращаются ли ключи и значения в том же порядке, ответ будет «Да». В документации говорится:

Если items() , keys() , values() , iteritems() , iterkeys() и itervalues() вызывают без промежуточных изменений в словаре, списки будут непосредственно соответствовать.

Если вы спрашиваете, будет ли dict( zip( d.keys(), d.values() ) ) == d всегда будет оцениваться True при любых обстоятельствах, ответ будет Нет. У вас может быть несколько потоков, с одним изменением d а другой – d.keys() , d.values() или dict(...) . Это создаст промежуточные изменения, недействительные условия, указанные выше.

Да, это гарантированное поведение 🙂

Ключи и значения перечислены в том же порядке, что и возвращаемые d.items : http://docs.python.org/library/stdtypes.html#dict.items

Обратите внимание, что в многопоточных средах лучше всего извлекать d.items() сразу, а не рисковать мутацией между последовательными вызовами d.keys() и d.values() .