为什么以下程序:
tokens = {
'Apple': 1,
'Orange': 2,
'Pear': 3,
'Banana': 4,
}
for t in tokens:
print t, 'corresponds to', tokens[t]
产生以下输出:
Orange corresponds to 2
Pear corresponds to 3
Apple corresponds to 1
Banana corresponds to 4
换句话说,为什么打印第2个条目,然后是第3个条目,然后是第1个,然后是第4个?即为什么不从第一个条目打印到最后一个?
答案 0 :(得分:1)
来自python documentation entry for dict
"键和值以任意顺序列出,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史。"
那将是因为dict被实现为一个哈希函数,它将键映射到一个任意排序但确定的列表上
任意因为(1)哈希函数未记录,并且(2)哈希映射到列表中的相同条目将(可能)根据其插入顺序排序;
deterministic ,以便您始终获得相同的值。
答案 1 :(得分:1)
不会订购字典,而是您可能希望使用OrderedDict。
这将记住您添加密钥的顺序。
from collections import OrderedDict
tokens = OrderedDict()
tokens['Apple'] = 1
tokens['Orange'] = 2
tokens['Pear'] = 3
tokens['Banana'] = 4
答案 2 :(得分:1)
如果你不想使用OrderedDict,你可以在jlb83的回答中循环查看有序的密钥列表。
tokens = {
'Apple': 1,
'Orange': 2,
'Pear': 3,
'Banana': 4,
}
for t in sorted(tokens.keys()):
print t, 'corresponds to', tokens[t]
产生以下输出
Apple corresponds to 1
Banana corresponds to 4
Orange corresponds to 2
Pear corresponds to 3
我确定可以通过各种方式进行排序,但这可行。