当我运行时
import itertools
bar = itertools.count(1).next
print {'a': bar(), 'b': bar(), 'c': bar()}
在CPython上,我得到{'a': 0, 'b': 1, 'c': 2}
。这在实施中是否一致和/或在任何地方都有记录? a
,b
和c
是否会按顺序分配值?
答案 0 :(得分:6)
您的问题的答案可以找到here(我没有足够的声誉将其添加为评论)。
总而言之,"字典评估顺序应与书面评估顺序相同,但有一个突出的错误,即在密钥之前评估值。'
答案 1 :(得分:5)
来自Python Docs(强调我的):
如果给出逗号分隔的键/数据对序列,从左到右计算它们以定义词典的条目:每个键对象用作词典中的键存储相应的数据....
因此,对将始终按评估。但是不要对元素的顺序感到困惑。
答案 2 :(得分:0)
有趣的问题。一个更好的测试是使用整数,因为这些散列到它们自己的值,并在文字中不按顺序使用它们,这样你就可以看到它们被评估的顺序。当你这样做时,你会看到:
>>> print {1: bar(), 3: bar(), 2: bar()}
{1: 1, 2: 3, 3: 2}
这意味着它们按从左到右的顺序进行评估,即使它们没有按顺序存储在字典中。