Python:对这个词典进行排序(dict中的dict)

use*_*652 12 python sorting dictionary

d = { 'a':{'k':1, 'b':'whatever'},  'b':{'k':2, 'b':'sort by k'} }
Run Code Online (Sandbox Code Playgroud)

想要在python中按k降序排序这个字典.

有点棘手,请帮忙.

unu*_*tbu 19

dicts是无序的.所以没有办法直接对它们进行排序,但是如果你愿意将它们转换dict为(key,value)-tuples的列表,那么你可以这样做:

In [9]: d
Out[9]: {'a': {'b': 'whatever', 'k': 1}, 'b': {'b': 'sort by k', 'k': 2}}

In [15]: sorted(d.items(),key=lambda x: x[1]['k'],reverse=True)
Out[15]: [('b', {'b': 'sort by k', 'k': 2}), ('a', {'b': 'whatever', 'k': 1})]
Run Code Online (Sandbox Code Playgroud)

这个优秀的迷你说明解释了key参数的使用.

  • @ user469652:你可能有一个名为`sorted`的变量,它隐藏了内置函数`sorted()`. (3认同)
  • 你能解释一下`x [1] ['k']`吗?我理解['k']部分,但x [1]是什么? (2认同)
  • @A:`dict.items()`返回一个2元组的列表(键,值). (2认同)

pyf*_*unc 5

如果您使用 python 2.7 或更高版本,请使用OrderedDict

有序字典就像普通字典一样,但它们记住插入项目的顺序。迭代有序字典时,项目将按照第一次添加它们的键的顺序返回。

从例子

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
Run Code Online (Sandbox Code Playgroud)

要尝试为 python 2.4 或更低版本实现相同的效果,请参阅:

Py2.7 的新 collections.OrderedDict 的替代品,适用于 Python 2.4-2.6。