3

这是我的字典:

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

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

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

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

谢谢。

4

2 回答 2

3
  1. dict.items根据值排序。
  2. 对排序列表进行切片。
  3. 将切片列表传递给dict().
  4. 将返回的 dict 传递dict()update要修改的 dict 的方法。

演示:

>>> 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}
于 2013-10-19T12:30:49.397 回答
1
dict(sorted(d.items(), key=lambda x:x[1], reverse=True)[:2])

更新一些东西:

感谢您的支持。

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

我很高兴看到最早的答案中出现了非常有用的形式“lambda x:x[1]”。

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

我也非常想知道:一个对 lambda 形式投反对票的人——lambda 怎么了?有更好的想法与我们分享吗?

于 2013-10-19T12:35:40.217 回答