在列表中包含的词典中查找3个最大值

时间:2016-05-25 11:55:17

标签: python list dictionary

my_list = [{0: 0}, {1: 4.2}, {2: 3.7}, {3: 5.0}, {4: 4.0}, {5: 3.3}, {6: 4.3}, {7: 4.0}, {8: 3.9}, 0, {10: 4.0}]

我希望我的程序要做的就是浏览列表,一旦扫描整个事物,记录最高值(如键值对中的值),附加该键值对到新列表,从原始列表[my_list]中删除该密钥对值,然后再重复该过程两次。所以期望的输出看起来像这样:

desired output: [{3: 5.0},{6: 4.3},{1: 4.2}]

我不确定如何实现所需的输出。

1 个答案:

答案 0 :(得分:0)

我假设my_list中的单个整数是拼写错误。

使用heapq模块获取三个最大的项目。这比排序整个列表然后提取最后三个元素稍微好一些complexity和内存效率。

>>> from heapq import nlargest
>>> my_list = [{0: 0}, {1: 4.2}, {2: 3.7}, {3: 5.0}, {4: 4.0}, {5: 3.3}, {6: 4.3}, {7: 4.0}, {8: 3.9}, {10: 4.0}]
>>> nlargest(3, my_list, key=lambda d: d.values()[0])
[{3: 5.0}, {6: 4.3}, {1: 4.2}]

key函数指定列表中的项目的排序标准,它只是获取任何单个字典的唯一值。