字典条目顺序的问题

时间:2019-03-29 18:58:41

标签: python-3.x

我展示了一些python数据类型及其功能和属性,其中一个是字典,我想重新分配第一个键的值,并确实重新分配了它,但是它也移动了键及其值到另一个位置,我不知道为什么

我在Python shell上尝试了此操作,它给了我预期的结果,但是当我在GDB在线调试器上尝试时,它给了我意外和错误的结果。

这是意外动作的代码片段:

a=[1, 2, 3, 3, 4]
b={'f':1, 's':2, 't':3, 'fo':4}
b['f']=0
a[0]=0
print(a, b)

我期望的是:

  

[1、2、3、3、4] {'f':0,'s':2,'t':3,'fo':4}

实际结果:

  

[0,2,3,3,4] {'s':2,'t':3,'fo':4,'f':0}

2 个答案:

答案 0 :(得分:2)

在Python <= 3.6中,dict是无序的。您不应依赖其元素的顺序。

在Python> = 3.7中,dict是插入顺序的。更新dict中的现有值应该不会影响顺序。

在所有版本> = 2.7中,如果需要稳定的订购,可以使用collections.OrderedDict

根据您描述的行为,我敢打赌,GDB在线版本的Python比本地版本()早,您在本地运行时还是很幸运。

答案 1 :(得分:0)

Python中的词典对它们的顺序不做任何保证,因此您看到的任何顺序都是纯粹一致的。如果要使用保留元素顺序的字典,则可以使用OrderedDict

from collections import OrderedDict
b = OrderedDict((('f', 1), ('s', 2), ('t', 3), ('fo', 4)))