这更多是关于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()
但那不是我要求的。