在Python中迭代时,如何在字典中选择键

时间:2015-12-16 07:16:51

标签: python dictionary

my_dict = {'a':10, 'b':20, 'c':30}

for key in my_dict:
    print key, my_dict[key]

给出

a 10
c 30
b 20

my_dict = {'a':10, 'c':30, 'b':20}

for key in my_dict:
    print key, my_dict[key]

给出相同的结果

a 10
c 30
b 20

我想知道为什么输出不像10 b 20 c 30.如何在迭代字典时完成键的选择?它是随机的吗?

4 个答案:

答案 0 :(得分:2)

  

字典对象的keys()方法返回所有的列表   字典中使用的键,以任意顺序(如果你想要它)   已排序,只需将sorted()函数应用于它)。检查一下   单个键在字典中,使用in关键字。

dict()中的键的顺序未定义(这取决于您正在使用的Python实现)。为了以有序的方式迭代dict:

my_dict = {'a': 10, 'b': 20, 'c': 30}
for key in sorted(my_dict.keys()):
    print key, my_dict[key]

这将为您提供正确的订单:

a 10
b 20
c 30

密钥未排序的原因是dict()使用哈希表来存储它们,这也是为什么您只能拥有一个唯一密钥以及为什么您可以拥有由可哈希对象组成的复合键的原因。密钥按其哈希值排序,有关更深入的解释,请参阅this SO question

答案 1 :(得分:2)

字典键按其哈希值排序,因此您不能指望任何订单。

如果您需要订购码,请使用SortedDict

如果您需要保留按键顺序,则应使用OrderedDict

答案 2 :(得分:1)

Python字典没有订单。如果要按特定顺序迭代键,则需要对键进行排序。

例如,使用sorted迭代键词典顺序:

>>> my_dict = {'a':10, 'c':30, 'b':20}
>>> for key in sorted(my_dict):
...     print key, my_dict[key]
... 
a 10
b 20
c 30

答案 3 :(得分:0)

如果要指定订单,可以按如下方式对键进行排序:

for key in sorted(my_dict.keys()):
    print '{0} {1}'.format(key, my_dict.get(key))

这会产生:

a 10
b 20
c 30