Является ли порядок ключей() и значений() в словаре 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()
, вероятно, является, пожалуй, самой простой реализацией. Но мне интересно, было ли это поведение явно определено или нет.
Ответы
Ответ 1
Ключи и значения перечислены в произвольном порядке, который является неслучайным, варьируется в зависимости от реализаций Python и зависит от истории словарей вставки и удаления. Если items()
, keys()
, values()
, iteritems()
, iterkeys()
и itervalues()
вызываются без промежуточных изменений в словаре, списки будут непосредственно соответствовать.
Из документация для dict
.
Ответ 2
Python 2.7 и выше упорядоченные словари, для которых ваше утверждение:
d == dict(zip(d.keys(), d.values()))
будет применяться