number = 2
dct = {'a': 5,'b': 3,'c': 4}
for key,value in dct.items():
我想检查字典中最大的值。检查取决于数字,因此在这种情况下,应返回{'a':5, 'c':4}
,因为数字为2
。但是,如果数字为1,则只返回{'a':5}
。我无法导入或使用lambda
答案 0 :(得分:4)
如果没有导入,您可以这样做:
>>> n = 2
>>> mydict = {'a': 5, 'b': 3, 'c': 4}
>>> {key: mydict[key] for key in sorted(mydict, key=mydict.get, reverse=True)[:n]}
{'a': 5, 'c': 4}
列表理解相当于:
result = {}
for key in sorted(mydict, key=mydict.get, reverse=True)[:n]:
result.update({key: mydict[key]})
如果多个键具有相同的值并且您想要破坏n个最大规则,那么您需要使用set
。
>>> mydict = {'a': 5, 'b': 3, 'c': 4, 'd': 4}
>>> {key: value for key, value in mydict.items() if value in sorted(set(mydict.values()), reverse=True)[:2]}
{'a': 5, 'c': 4, 'd': 4}
您还可以使用词典理解来获取nlargest
dict.values()
及相关关键字。
>>> import heapq
>>> n = 2
>>> mydict = {'a': 5, 'b': 3, 'c': 4}
>>> {key: value for key, value in mydict.items() if value in heapq.nlargest(n, mydict.values())}
{'a': 5, 'c': 4}
答案 1 :(得分:1)
import heapq
number = 2
d={'a':5,'b':3,'c':4}
maximums = {k: d[k] for k in heapq.nlargest(number, d, key=lambda k: d[k])}
更新:没有lambda和导入
number = 2
d={'a':5,'b':3,'c':4}
{i[1]:i[0] for i in sorted(zip(d.values(), d.keys()), reverse=True)[:number]}
答案 2 :(得分:0)
查看我的回答
>>> number = 2
>>> dct = {'a': 5,'b': 3,'c': 4}
>>> lst = sorted([value for value in dct.values()],
reverse=True)[:number]
>>> result = {k: v for k, v in dct.items() if v in lst}
>>> result
{'a': 5, 'c': 4}
在lst
中,您将按降序获得dct
值的列表,其中索引低于number
。
>>> lst
[5, 4]
然后dct
过滤了lst
中的值。