Подтвердить что ты не робот

Является ли порядок ключей() и значений() в словаре python гарантированным одним и тем же?

Является ли встроенный python dict гарантией того, что списки keys() и values() упорядочены таким же образом?

d = {'A':1, 'B':2, 'C':3, 'D':4 } # or any other content
otherd = dict(zip(d.keys(), d.values()))

У меня всегда есть d == otherd?

Либо это true, либо false, меня интересует любой ссылочный указатель на тему.

PS: Я понимаю, что указанное выше свойство не будет истинным для всех объектов, которые ведут себя как словарь, я просто задаюсь вопросом о встроенном dict. Когда я тестирую это выглядит так, как будто это правда, и это не удивительно, потому что одинаковый порядок для keys() и values(), вероятно, является, пожалуй, самой простой реализацией. Но мне интересно, было ли это поведение явно определено или нет.

4b9b3361

Ответ 1

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

Из документация для dict.

Ответ 2

Python 2.7 и выше упорядоченные словари, для которых ваше утверждение:

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

будет применяться