将字典的前2个最大键和值放在另一个字典中

时间:2013-10-19 12:28:19

标签: python dictionary

这是我的字典:

d = {'a': 100, 'b': 200, 'c': 300, 'd': 350} 

我可以找到最大值的前2个键并将它们放到列表中:

sorted(d, key=d.get, reverse=True)[:2]

但是我应该怎样做才能将前2个最大的键和值放在另一个词典而不是列表中?

感谢。

2 个答案:

答案 0 :(得分:3)

  1. 根据值对dict.items进行排序。
  2. 剪切已排序的列表。
  3. 将切片列表传递给dict()
  4. 将从dict()返回的dict传递给要修改的dict的update方法。
  5. <强>演示:

    >>> d = {'a': 100, 'b': 200, 'c': 300, 'd': 350}
    >>> dic = {}
    >>> dic.update(dict(sorted(d.items(), key=lambda x:x[1], reverse=True)[:2]))
    >>> dic
    {'c': 300, 'd': 350}
    

    使用operator.itemgetter

    from operator import itemgetter
    dic = {}
    dic.update(dict(sorted(d.items(), key=itemgetter(1), reverse=True)[:2]))
    

    如果字典很大,那么heapq.nlargest将比sorted更高效:

    >>> import heapq
    >>> dic = {}
    >>> dic.update({k:d[k] for k in heapq.nlargest(2, d, key=d.get)})
    >>> dic
    {'c': 300, 'd': 350}
    

答案 1 :(得分:1)

dict(sorted(d.items(), key=lambda x:x[1], reverse=True)[:2])

更新内容:

感谢一位赞成票。

我看到没有人回答这个问题所以我决定回答这个问题,但是当我提交答案时,它已经排在第3位。

我很高兴看到非常有用的表格“lambda x:x [1]”出现在最终答案中。

我强烈推荐这种形式。简单而强大的描述理念。

我也非常想知道:那个lambda形式的一个人 - 用lambda做什么?有什么更好的想法与我们分享?