繁体   English   中英

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

[英]How are the keys selected in a dictionary while in iteration in Python

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.如何在迭代字典时完成键的选择? 是随机的吗?

字典对象的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()使用哈希表来存储它们,这也是为什么你只能有一个唯一键以及为什么你可以拥有由可哈希对象组成的复合键的原因。 密钥按其哈希值排序,有关更深入的解释,请参阅此SO问题

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

如果您需要订单密钥,则应使用SortedDict

如果您需要保留密钥顺序,则应使用OrderedDict

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

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

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

这会产生:

a 10
b 20
c 30

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM