OrderedDict:也是订购的价值?

时间:2015-02-27 10:42:06

标签: python

collections.OrderedDict文档将OrderedDict描述为

  

记住首次插入密钥的顺序的字典

所以

的顺序
for k in dict:
  ...

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

是可预测的。

然而,它没有提及价值观。如果我只需要按如下方式迭代值,结果是否也会按插入顺序排列?

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

CPython中的一些快速测试表明情况确实如此,但这可能与目前的实施情况一致(我还没有对其他人进行过测试)。

2 个答案:

答案 0 :(得分:9)

是的,keys()values()的列表按所有词组not just in ordered ones的相应顺序排列。

在Python 3.6之前,对于普通的dicts,顺序是任意的,但是keys()values()items()返回的相同的任意顺序,如果在对这些方法的调用之间没有修改dict。

从Python 3.6开始,dict尊重插入顺序。从3.7开始,它已成为documented保证。

答案 1 :(得分: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