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

4
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个回答

8

如果不导入,可以像这样做:

>>> 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}

您也可以使用字典推导来获取字典中前n个最大值,以及相应的键。具体可参考nlargestdict.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}

我喜欢你的方式,但我不想把它放在一行里。 - Monty
@CAVS,现在开心了吗? :) - styvane
如果我有多个键具有高值怎么办?我的字典是 {'a': 5, 'b': 3, 'c': 4, 'd': 4},数字是2,我想得到 {'a':5, 'c': 4, 'd':4}。 - Monty

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]}

我无法导入或使用lambda。 - Monty

1
看我的答案。
>>> 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 中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接