为什么Python字典的元素不会按顺序打印

1 投票
3 回答
4461 浏览
提问于 2025-04-16 16:13

我有一个字典

sr = {'DTW':'CNT','FWA':'CNT','GRR':'CNT','IND':'CNT','MKE':'CNT','MLI':'CNT','MSP':'CNT','OMA':'CNT','ORD':'CNT','SBN':'CNT','STL':'CNT','BDL':'EST','BOS':'EST','BWI':'EST','CLE':'EST','CMH':'EST','CVG':'EST','EWR':'EST','IAD':'EST','JFK':'EST','MDT':'EST','PHL':'EST','PIT':'EST','ROC':'EST','ABQ':'CNT','AUS':'CNT','DEN':'CNT','DFW':'CNT','ELP':'CNT','IAH':'CNT','LRD':'CNT','MCI':'CNT','MFE':'CNT','MSY':'CNT','OKC':'CNT','SAT':'CNT','TUL':'CNT','ATL':'EST','BNA':'EST','CLT':'EST','JAX':'EST','MCO':'EST','MEM':'EST','MIA':'EST','RDU':'EST','RIC':'EST','SDF':'EST','SJU':'EST','TPA':'EST','ANC':'WST','HNL':'WST','LAS':'WST','LAX':'WST','PDX':'WST','PHX':'WST','RNO':'WST','SAN':'WST','SEA':'WST','SFO':'WST','SLC':'WST','SMF':'WST','TUS':'WST'}

for s, r in sr.iteritems():
   print s, r 

但是在打印的时候,它是从

JFK EST
MKE CNT

开始打印的,为什么呢?为什么打印的时候不从DTW开始呢?

3 个回答

0

请注意,自从Python 3.7版本以来,这个情况发生了变化。

根据这个链接的说明:“在3.7版本中,字典的顺序保证是按照插入的顺序排列的。这种行为在3.6版本的CPython中只是一个实现细节。”

1

PyMOTO的OrderedDict教程提供了一些很好的例子,关于OrderedDict()的使用。

12

因为字典的实现是通过哈希表(hashmap)来完成的,而哈希表并不按照顺序存储元素。

根据官方文档

CPython的实现细节:字典中的键和值是以一种任意的顺序列出的,这个顺序不是随机的,会因不同的Python实现而有所不同,并且还取决于字典的插入和删除历史。

如果顺序很重要,你应该使用OrderedDict

撰写回答