这个问题在这里已有答案:
collections.OrderedDict文档将OrderedDict
描述为
一个dict,它记住了第一次插入密钥的顺序
所以顺序
for k in dict:
...
for k in dict.keys():
...
是可以预测的。
但是,它没有说出价值观。如果我只需要按如下方式迭代值,结果是否也会遵循逐个插入的顺序?
for v in dict.values():
...
CPython中的一些快速测试表明情况就是如此,但这可能只是当前实现的coinicidental(我没有测试任何其他)。
是的,keys()
和values()
的列表按照相应的顺序排列在所有的qtsxswpoi中。
在Python 3.6之前,对于普通的dicts,顺序是任意的,但它是由not just in ordered ones,keys()
和values()
返回的相同的任意顺序,前提是在调用这些方法之间没有修改dict。
从Python 3.6开始,dict尊重插入顺序。从3.7开始,它已成为items()
的保证。
是的,它们按键的顺序排序。这与所有documented实现相同。
键和值以任意顺序迭代,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。如果迭代键,值和项视图而没有对字典的干预修改,则项的顺序将直接对应。这允许使用
dict
:(value, key)
创建zip()
对。另一种创建相同列表的方法是pairs = zip(d.values(), d.keys())
。
pairs = [(v, k) for (k, v) in d.items()]