如何按键对字典进行排序?

新手上路,请多包涵

如何按字典的键对字典进行排序?

示例输入:

 {2:3, 1:89, 4:5, 3:0}

期望的输出:

 {1:89, 2:3, 3:0, 4:5}

原文由 Antony 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 473
2 个回答

注意: 对于 Python 3.7+,请参阅 此答案

标准 Python 字典是无序的(直到 Python 3.7)。即使您对 (key,value) 对进行了排序,您也无法以保留顺序的方式将它们存储在 dict 中。

最简单的方法是使用 OrderedDict ,它会记住插入元素的顺序:

 In [1]: import collections

In [2]: d = {2:3, 1:89, 4:5, 3:0}

In [3]: od = collections.OrderedDict(sorted(d.items()))

In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])

别介意 od 的打印方式;它会按预期工作:

 In [11]: od[1]
Out[11]: 89

In [12]: od[3]
Out[12]: 0

In [13]: for k, v in od.iteritems(): print k, v
   ....:
1 89
2 3
3 0
4 5

蟒蛇 3

对于 Python 3 用户,需要使用 .items() 而不是 .iteritems()

 In [13]: for k, v in od.items(): print(k, v)
   ....:
1 89
2 3
3 0
4 5

原文由 NPE 发布,翻译遵循 CC BY-SA 4.0 许可协议

字典本身没有这样的有序项目,如果您想按某种顺序打印它们等,这里有一些例子:

在 Python 2.4 及更高版本中:

 mydict = {'carl':40,
          'alan':2,
          'bob':1,
          'danny':3}

for key in sorted(mydict):
    print "%s: %s" % (key, mydict[key])

给出:

 alan: 2
bob: 1
carl: 40
danny: 3

(Python 2.4 以下:)

 keylist = mydict.keys()
keylist.sort()
for key in keylist:
    print "%s: %s" % (key, mydict[key])

来源:http: //www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/

原文由 James 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题