是否按顺序评估Python字典文字?

时间:2015-03-04 21:00:50

标签: python dictionary

当我运行时

import itertools

bar = itertools.count(1).next

print {'a': bar(), 'b': bar(), 'c': bar()}

在CPython上,我得到{'a': 0, 'b': 1, 'c': 2}。这在实施中是否一致和/或在任何地方都有记录? abc是否会按顺序分配值?

3 个答案:

答案 0 :(得分:6)

您的问题的答案可以找到here(我没有足够的声誉将其添加为评论)。

总而言之,"字典评估顺序应与书面评估顺序相同,但有一个突出的错误,即在密钥之前评估值。'

答案 1 :(得分:5)

来自Python Docs(强调我的):

  

如果给出逗号分隔的键/数据对序列,从左到右计算它们以定义词典的条目:每个键对象用作词典中的键存储相应的数据....

因此,对将始终按评估。但是不要对元素的顺序感到困惑。

答案 2 :(得分:0)

有趣的问题。一个更好的测试是使用整数,因为这些散列到它们自己的值,并在文字中不按顺序使用它们,这样你就可以看到它们被评估的顺序。当你这样做时,你会看到:

>>> print {1: bar(), 3: bar(), 2: bar()}
{1: 1, 2: 3, 3: 2}

这意味着它们按从左到右的顺序进行评估,即使它们没有按顺序存储在字典中。