Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python字典中选择K个最大值_Python_Dictionary - Fatal编程技术网

在python字典中选择K个最大值

在python字典中选择K个最大值,python,dictionary,Python,Dictionary,我有一本字典如下: ls = [{'0': {'1': '1','2': '0.5','3': '1'},'1': {'0': '0.2','2': '1','3': '0.8'},}] 我想为字典(ls)的每个键选择k个最大值及其键。我写了以下命令。它只给我k个最大的键,没有它们的值 Python代码: import heapq k=2 for dic in ls: for key in dic: print(heapq.nlargest(k, dic[key], k

我有一本字典如下:

ls = [{'0': {'1': '1','2': '0.5','3': '1'},'1': {'0': '0.2','2': '1','3': '0.8'},}]
我想为字典(ls)的每个键选择k个最大值及其键。我写了以下命令。它只给我k个最大的键,没有它们的值

Python代码:

import heapq
k=2
for dic in ls:
    for key in dic:
        print(heapq.nlargest(k, dic[key], key=dic[key].get))
输出

['2', '3']
['3', '1']
我需要每个选定键的值。

如何:

from operator import itemgetter
for d in ls:
    for key, d2 in d.items():
        print(dict(heapq.nlargest(k, d2.items(), key=itemgetter(1))))
请注意,您的值仍然是字符串,因此它们是按字典顺序排列的,这不是您想要的,因为
'2'>12'
而字典是不按顺序排列的

那么:

from operator import itemgetter
for d in ls:
    for key, d2 in d.items():
        print(dict(heapq.nlargest(k, d2.items(), key=itemgetter(1))))
请注意,您的值仍然是字符串,因此它们是按字典顺序排列的,这不是您想要的,因为
'2'>12'
而字典是不按顺序排列的

  • 首先,我只是想看看你为什么

    ls=[{'0':{'1':'1','2':'0.5','3':'1'},'1':{'0':'0.2','2':'1','3':'0.8'},}]

    这是一个包含dict的列表,它与问题中的描述不匹配

  • 下面是一个使用dict理解的解决方案,它应该能满足您的需求:)

    在这里,它用于解决您的问题:

    ls = [{'0': {'1': '1','2': '0.5','3': '1'},'1': {'0': '0.2','2': '1','3': '0.8'},}]
    d = ls[0]
    get_n_largest_vals(2, d)
    >>> {'0': ['3', '2'], '1': ['3', '2']}
    
      • 首先,我只是想看看你为什么

        ls=[{'0':{'1':'1','2':'0.5','3':'1'},'1':{'0':'0.2','2':'1','3':'0.8'},}]

        这是一个包含dict的列表,它与问题中的描述不匹配

      • 下面是一个使用dict理解的解决方案,它应该能满足您的需求:)

        在这里,它用于解决您的问题:

        ls = [{'0': {'1': '1','2': '0.5','3': '1'},'1': {'0': '0.2','2': '1','3': '0.8'},}]
        d = ls[0]
        get_n_largest_vals(2, d)
        >>> {'0': ['3', '2'], '1': ['3', '2']}
        

      谢谢您的回复。您建议的方法很有效,但我需要将输出作为字典,如下所示:{'2':'1','3':'0.8'}谢谢您的回复。您建议的方法很有效,但我需要将输出作为字典,如下所示:{'2':'1','3':'0.8'}