collections.OrderedDict文档将OrderedDict
描述为
记住首次插入密钥的顺序的字典
所以
的顺序for k in dict:
...
for k in dict.keys():
...
是可预测的。
然而,它没有提及价值观。如果我只需要按如下方式迭代值,结果是否也会按插入顺序排列?
for v in dict.values():
...
CPython中的一些快速测试表明情况确实如此,但这可能与目前的实施情况一致(我还没有对其他人进行过测试)。
答案 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()]
。