【问题标题】:Finding 3 biggest value in dictionaries contained within a list在列表中包含的字典中查找 3 个最大值
【发布时间】:2016-09-23 00:18:51
【问题描述】:
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}]

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

【问题讨论】:

  • 看起来像一个有效的算法,那么你的问题是什么?
  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只会在发布者已经尝试自己解决问题时提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 您的列表中有一个非字典元素。

标签: python list dictionary


【解决方案1】:

我假设您的 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 函数指定对列表中的项目进行排序的标准,它只是获取任何单个字典的唯一值。

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 2014-10-06
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多