非确定性字典创建

时间:2017-06-29 12:26:39

标签: python python-3.x dictionary

我有以下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。

我的问题不是特定的顺序,只是确定性的顺序。

2 个答案:

答案 0 :(得分:2)

dict未订购,可以显示任意排序....您应该阅读collections.OrderedDicthttps://docs.python.org/3/library/collections.html

答案 1 :(得分:0)

虽然字典在3.6版本(但不是之前)的Python中确定性地排序,但你不应该依赖这个事实。

如果您需要类似字典来保证顺序,请在迭代之前使用collections.OrderedDict或排序。

"有序"在这两种情况下都意味着:remembers the order entries were added