Python字典中的循环顺序是怎样的?
我对下面这个代码的输出有点困惑。
我不太明白这个循环执行的顺序。
domains = { "de": "Germany", "sk": "Slovakia", "hu": "Hungary",
"us": "United States", "no": "Norway" }
for key in domains:
print key
这里的输出是
sk
de
no
us
hu
但不是
de
sk
hu
us
no
同样,在这里
num = {1:"one",4:"two",23:"three",10:"four"}
for key in num:
print key
output is
1
10
4
23
但不是
1
4
23
10
谢谢你的帮助
5 个回答
6
顺序是没有具体规定的。不过,如果字典没有被修改,顺序是不会改变的。
在遍历的时候,你可以对键进行排序:
for key in sorted(domains):
print key
最后,值得一提的是,更新版的Python有一个叫做 collections.OrderedDict
的东西,它可以保持 插入顺序。
8
Python 的字典不保留顺序:
字典里的键和值是以一种不固定的顺序列出的,这种顺序不是随机的,会因不同的 Python 实现而有所不同,还和字典的插入和删除历史有关。
在 CPython 中,字典是用哈希表来实现的,这样可以快速查找和测试某个值是否在字典里。列出键或值的顺序是根据它们在哈希表中的位置来决定的;这些位置是根据键的哈希值来确定的,如果之前有其他东西被哈希到同一个位置,也会影响插入的位置。
所以每次显示字典内容时,你要么得每次都对键进行排序,要么就得使用其他类型的数据结构来保留顺序。Python 2.7 及更新版本提供了collections.OrderedDict()
这种类型,或者你也可以使用一个包含两个值的元组的列表(不过这样查找单个键值对会比较慢)。
7
Python中的字典是没有顺序的。不过,你可以通过使用 sorted(domains)
这个函数来指定一个顺序。默认情况下,它是根据字典的键来排序的。
for key in sorted(domains):
print key
这样会产生
de
hu
no
sk
us
如果你想根据字典中的值来排序,可以使用类似 sorted(domains.items(), key = lambda(k, v): (v, k))
的写法。