在Python中,给定一个包含值中列表的字典,如何根据该列表中的项目数量对字典进行排序?

时间:2017-10-25 01:41:31

标签: python dictionary

我有一本字典

d={'d': ['dog', 'dance', 'dragon'], 'c': ['cow', 'cotton'], 'a': ['apple'],  'r': ['robot']}

我希望定义一个函数,它将按照集合的大小对它们进行排序。也就是说,因为" d"该值中包含3个项目," c"有两个项目," a"和" r"每个都有一个项目,我想按顺序排列一个字典。所以

def order_by_set_size(d):
    return sorted(d, key=lambda k: len(d[k]), reverse=True)

到目前为止我所拥有的是

override func viewDidLoad() -> Void{
    super.viewDidLoad()
    dummy.removeFromSuperview()
}

这给了我一个清单,但我无法弄清楚如何让它给我一本字典。我已经查看了很多其他问题并尝试了不同的代码变体,这就像我能得到的一样。

(我使用的是Python 3)

2 个答案:

答案 0 :(得分:2)

您需要使用OrderedDict 见https://docs.python.org/3/library/collections.html#collections.OrderedDict

基于他们的例子

from collections import OrderedDict

d={'a': ['apple'], 'd': ['dog', 'dance', 'dragon'], 'r': ['robot'], 'c': ['cow', 'cotton']}
ordered = OrderedDict(sorted(d.items(),key=lambda t: len(t[1]),reverse=True))

答案 1 :(得分:0)

根据定义,字典是无序的键值对。因此,下面的代码是正确的,因为如果要对其进行排序,则只能获取列表。换句话说,字典无法排序,因此给出的任务是不可能的。

def order_by_set_size(d):
    return sorted(d, key=lambda k: len(d[k]), reverse=True)