使用for循环打印字典中的条目

时间:2015-01-22 08:51:03

标签: python for-loop dictionary

为什么以下程序:

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个?即为什么不从第一个条目打印到最后一个?

3 个答案:

答案 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

我确定可以通过各种方式进行排序,但这可行。