为什么dict和dict.items()的顺序不同?

时间:2016-09-04 20:55:18

标签: python python-2.7 dictionary ipython

>>> d = {'A':1, 'b':2, 'c':3, 'D':4}

>>> d
{'A': 1, 'D': 4, 'b': 2, 'c': 3}

>>> d.items()
[('A', 1), ('c', 3), ('b', 2), ('D', 4)]

当我调用d.items()时,订单是否会被随机化两次?或者只是以不同方式随机化?是否有任何替代方法使d.items()返回与d相同的顺序?

编辑:似乎是一个IPython的东西,它自动排序字典。通常dict和dict.items()的顺序应该相同。

1 个答案:

答案 0 :(得分:9)

你似乎已经在IPython上测试了这个。 IPython使用自己专门针对各种类型的漂亮打印设备,而用于dicts的漂亮打印机在打印前对键进行排序(如果可能)。 repr调用不对键进行排序,因此输出不同。

在普通的Python会话中,字典items中项目的顺序将与repr方法中的项目顺序相匹配。只要不修改dict,Dict迭代顺序就应该是稳定的。 (此保证未明确扩展到dict的repr,但如果<c:url value="/resources/js" var="js"/> <c:url value="/resources/css" var="css"/> <html> <head> <link href="${css}/bootstrap.min.css" rel="stylesheet"> <link href="${css}/stylesheet.css" rel="stylesheet"> </head> <body> ... <script src="${js}/jquery-2.1.4.min.js"></script> <script src="${js}/bootstrap.min.js"></script> </body> </html> 中的隐式迭代破坏了与其他形式的dict迭代的一致性,那将会令人惊讶。)