此问题来自this answer,其中有一位用户 分别使用
d.keys()
和d.values()
初始化数据框。
众所周知,3.6版本的python版本中的字典不是有序的。
考虑表格的通用字典:
d = {k1 : v1, k2 : v2, k3 : v3}
键k*
是任何可清除对象,值v*
是任何对象。当然,订单无法保证,但d.keys()
和d.values()
的订单呢?
Python 2.x
d.keys()
和d.values()
返回列表。说,.keys()
按d
的顺序返回[k2, k1, k3]
个键。现在始终保证 d.values()
返回与[v2, v1, v3]
相同的相对排序吗?此外,无论调用这些函数多少次,顺序是否保持不变?
Python 3.x(< 3.6)
我不是100%肯定,但我相信.keys
和.values
在这里根本不保证任何排序,因为它们是类似集合的结构,因此根据定义没有顺序并使您能够对它们执行类似集合的操作。但我仍然有兴趣知道在这个实例中两个调用之间是否存在任何类型的相对排序。 我猜不会。如果有人可以肯定或纠正我,我会感激。
答案 0 :(得分:6)
一般规则:
d.keys()
,d.values()
和d.items()
都按相应的顺序返回元素。该订单应视为任意(不应对其进行任何假设)。 (docs)d.keys()
,d.values()
和d.items()
的连续调用是“稳定的”,因为它们可以保证保留先前调用的顺序(假设之间没有插入/删除电话)。dict
has been reimplemented以来,它现在保留插入顺序。这不是改变的目标,而是副作用,它不是python规范的一部分,只是CPython实现的一个细节。请参阅上面的第1点:依赖于此是不好的做法,不应该这样做。无论如何,你应该避免编写特定于CPython的代码。