如何按键排序字典?

1511 投票
33 回答
2239312 浏览
提问于 2025-04-17 11:03

我该如何按照字典的键来排序呢?

输入示例:

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

想要的输出:

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

33 个回答

514

字典本身并没有顺序,如果你想要以某种顺序打印它们,这里有一些例子:

在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/

606

对于CPython/PyPy 3.6,以及任何Python 3.7或更高版本,这个操作非常简单,可以通过以下方式实现:

>>> d = {2:3, 1:89, 4:5, 3:0}
>>> dict(sorted(d.items()))
{1: 89, 2: 3, 3: 0, 4: 5}
1290

注意:对于 Python 3.7 及以上版本,请查看 这个回答

标准的 Python 字典是无序的(直到 Python 3.7 版本)。即使你对(键,值)对进行了排序,也无法以保持顺序的方式将它们存储在 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

Python 3

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

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

撰写回答