哪个PEP控制dict.values()的顺序?

时间:2009-05-14 13:53:07

标签: python dictionary

当你调用dict.values()时,返回项的顺序取决于键的has值。这似乎在所有版本的cPython中都非常一致,但是dict simply states that the ordering is "arbitrary"的python手册。

我记得在某个地方读过,实际上有一个PEP专门说明了items()和values()方法的预期顺序。

仅供参考,如果这种行为确实是我正在努力的类的保证行为,我可以大大简化并加快我正在研究的课程。另一方面,如果这仅仅是cPython的一个偶然且无法记录的特征,那么最好不要相信它。

3 个答案:

答案 0 :(得分:7)

来自http://docs.python.org/library/stdtypes.html

  

键和值列在   任意顺序是非随机的,   不同的Python实现,   并取决于字典   插入和删除的历史。

答案 1 :(得分:6)

我认为PEP-3106尽可能接近:

  

规范暗示了项目的返回顺序   .keys(),. value()和.items()是   相同(就像在Python 2.x中一样),   因为订单全部来自   dict迭代器(大概是   任意但稳定只要一个字典   没有修改)。这可以表达   由以下不变量:

     

list(d.items()) == list(zip(d.keys(), d.values()))

答案 2 :(得分:2)

“任意”与“偶然”不同。

但它与“无证件”相同。由于字典基于散列,因此您无法 - 确实 - 保证基于散列算法和发生的冲突进行排序。

要保证订单,请使用sorted功能。

或者你可以找到一个好的ordered dictionary实现,而不是dict。