我展示了一些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}
答案 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)))