在字典中获取n个最大的键值

时间:2016-11-24 03:24:31

标签: python python-3.x dictionary

number = 2
dct = {'a': 5,'b': 3,'c': 4}

for key,value in dct.items():

我想检查字典中最大的值。检查取决于数字,因此在这种情况下,应返回{'a':5, 'c':4},因为数字为2。但是,如果数字为1,则只返回{'a':5}。我无法导入或使用lambda

3 个答案:

答案 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中的值。