Python洞察力 - 解释器如何“排序”非有序字典

时间:2016-06-21 08:38:38

标签: dictionary python-3.5

问题的背景

这更多是关于Python解释器如何工作的好奇心而不是真正的问题(尽管我希望无论如何这是一个可接受的问题)。

在我的具体情况下(也许没关系,我不知道)我在Windows 7(64位)上运行3.5解释器(32位)。

正在运行代码

这是我从Python 3.5解释器运行的简单代码。

counter_example = {}
counter_example['one'] = 1
counter_example['two'] = 2
counter_example['three'] = 3
for currkey, currvalue in counter_example.items():
   print ('%s - %s' % (currkey, currvalue))

我启动一个解释器窗口A,我运行这个代码更多次(让我们说3-4次),然后我启动第二个python解释器窗口再次运行代码3-4次,最后同样的事情与一个第三个解释器窗口C.

输出

我注意到 - 如果我在相同的解释器窗口执行此次操作,我会得到相同的输出,这意味着相同的顺序。

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:38:48) [MSC v.1900 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> counter_example = {}
>>> counter_example['one'] = 1
>>> counter_example['two'] = 2
>>> counter_example['three'] = 3
>>> for currkey, currvalue in counter_example.items():
...    print ('%s - %s' % (currkey, currvalue))
...
two - 2
one - 1
three - 3
>>> counter_example = {}
>>> counter_example['one'] = 1
>>> counter_example['two'] = 2
>>> counter_example['three'] = 3
>>> for currkey, currvalue in counter_example.items():
...    print ('%s - %s' % (currkey, currvalue))
...
two - 2
one - 1
three - 3
>>>

在另一个命令窗口,输出将以不同的顺序,但是 - 令人惊讶的是恕我直言 - 如果我在那里重新运行测试,将从字典声明中重新开始,将保留项目的顺序。 为什么会这样? 幕后发生了什么?

请注意

我知道我可以做到这一点

for currkey, currvalue in sorted(counter_example.items()):

from collections import OrderedDict
counter_example = OrderedDict()

但那不是我要求的。

0 个答案:

没有答案