我有以下testcase_dict.py
脚本:
print([{x: 'hello', 'x': 'y'} for x in [1, 2]])
我运行这个脚本,每15次,2-4次,它给了我不同的结果:
$ for i in $(seq 15); do python testcase_dict.py; done
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {'x': 'y', 2: 'hello'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{'x': 'y', 1: 'hello'}, {'x': 'y', 2: 'hello'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {'x': 'y', 2: 'hello'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {'x': 'y', 2: 'hello'}]
[{'x': 'y', 1: 'hello'}, {'x': 'y', 2: 'hello'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
[{1: 'hello', 'x': 'y'}, {2: 'hello', 'x': 'y'}]
为什么会发生这种情况,我该如何防止它。这可能是一些非常不受欢迎的加薪条件的原因。
我的Python版本是3.5.2。
我的问题不是特定的顺序,只是确定性的顺序。
答案 0 :(得分:2)
dict
未订购,可以显示任意排序....您应该阅读collections.OrderedDict
:https://docs.python.org/3/library/collections.html
答案 1 :(得分:0)
虽然字典在3.6版本(但不是之前)的Python中确定性地排序,但你不应该依赖这个事实。
如果您需要类似字典来保证顺序,请在迭代之前使用collections.OrderedDict
或排序。
"有序"在这两种情况下都意味着:remembers the order entries were added。