【问题标题】:Are order of keys() and values() in python dictionary guaranteed to be the same? [duplicate]python字典中keys()和values()的顺序是否保证相同? [复制]
【发布时间】:2010-09-08 09:18:06
【问题描述】:

本机内置 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 吗?

不管是真是假,我对这个主题的任何引用指针都感兴趣。

PS:我知道上述属性对于每个表现得像字典的对象都不是真的,我只是想知道内置的字典。当我测试时,它看起来好像是真的,这并不奇怪,因为keys()values() 的顺序相同可能是最简单的实现。但我想知道是否明确定义了这种行为。

【问题讨论】:

  • 在 CPython 3.6(以及从 3.7 开始的所有其他 python 实现)中,字典项保持插入的顺序。

标签: python dictionary


【解决方案1】:

键和值以非随机的任意顺序列出,因 Python 实现而异,并且取决于字典的插入和删除历史。如果调用 items()keys()values()iteritems()iterkeys()itervalues() 而没有对字典进行干预修改,则列表将直接对应。

来自the documentation for dict

【讨论】:

  • so d 和 otherd 将始终相同。
【解决方案2】:

Python 2.7 及以上版本有ordered dictionaries,对此您的声明:

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

会申请

【讨论】:

  • 因为它已经适用于每个字典,它当然应该仍然适用于有序字典
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2011-04-06
  • 2011-01-04
  • 2020-11-01
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多