OrderedDict:也是订购的价值? [重复]

问题描述 投票:8回答:2

这个问题在这里已有答案:

collections.OrderedDict文档将OrderedDict描述为

一个dict,它记住了第一次插入密钥的顺序

所以顺序

for k in dict:
  ...

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

是可以预测的。

但是,它没有说出价值观。如果我只需要按如下方式迭代值,结果是否也会遵循逐个插入的顺序?

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

CPython中的一些快速测试表明情况就是如此,但这可能只是当前实现的coinicidental(我没有测试任何其他)。

python
2个回答
9
投票

是的,keys()values()的列表按照相应的顺序排列在所有的qtsxswpoi中。

在Python 3.6之前,对于普通的dicts,顺序是任意的,但它是由not just in ordered oneskeys()values()返回的相同的任意顺序,前提是在调用这些方法之间没有修改dict。

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


2
投票

是的,它们按键的顺序排序。这与所有documented实现相同。

键和值以任意顺序迭代,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。如果迭代键,值和项视图而没有对字典的干预修改,则项的顺序将直接对应。这允许使用dict(value, key)创建zip()对。另一种创建相同列表的方法是pairs = zip(d.values(), d.keys())

pairs = [(v, k) for (k, v) in d.items()]

© www.soinside.com 2019 - 2024. All rights reserved.