如果我在Python中有一个字典,并且我迭代了一次,然后再次迭代,是否保证迭代顺序保留,因为我没有插入,删除或更新字典中的任何项目? (但我可能已经做过查找)。
答案 0 :(得分:31)
以下是dict.items()
documentation所说的内容:
dict.items()返回字典的(键,值)对列表的副本。
如果调用items(),keys(),values(),iteritems(),iterkeys()和itervalues()而没有对字典进行干预修改,则列表将直接对应。
我认为如果您所做的只是迭代,那么假设项目排序不会改变是合理的。
答案 1 :(得分:12)
标准Python dict
与大多数实现一样,不会保留排序,因为通常使用密钥访问项目。
然而,可预测的迭代有时是有用的,并且在Python 3.1中,collections
模块包含一个OrderedDict,它保留了订单,但性能开销最小。
答案 2 :(得分:5)
是。没有涉及随机化。还有一个更强大的保证 - 见here。
答案 3 :(得分:4)
collections.OrderedDict
将在Python 2.7中提供。
对于2.7之前的Python版本,PyPI上有collective.ordereddict,Django有自己的SortedDict实现。
答案 4 :(得分:2)
Python字典没有顺序概念。所以你在迭代时不能依赖特定的顺序。
这是故意的:因为它是一个哈希映射,如果你想要'快速查找',这是不可避免的!
答案 5 :(得分:2)
它可能会在某些实现中保留,但不要指望它,因为它不是Dict规范的一部分。
答案 6 :(得分:1)
正如Christophe所说,字典用于组织键/值对,因为它提供了快速的访问时间。如果应用程序需要固定索引,则应查看提供特定/已知顺序的其他数据结构。
话虽如此,应该可以安全地假设订单不会改变,除非添加了项目(没有任何意义可以进行这种昂贵的重组操作)但是,再次,不要依赖在它上面。