比较字典列表后,编写Python函数以返回与给定输入对应的最大值的更好方法

我有以下词典列表,

test = [{'a':100, 'b':1, 'd':3.2},
    {'a':200, 'b':5, 'd':8.75},
    {'a':500, 'b':2, 'd':6.67},
    {'a':150, 'b':7, 'd':3.86},
    {'a':425, 'b':2, 'd':7.72},
    {'a':424, 'b':2, 'd':7.72}]

给定一个'b'值,我需要找到'd'的最大值并在该字典中提取相应的'a'值。如果有平局,则取最高值“ a”。例如{a:424,b:2,d:7.72}和{a:424,b:2,d:7.72}的b = 2,并且它们对应的d值相等。在这种情况下,我返回a = 425。

以下代码可以正常运行。但是,我想知道优化此方法或使用匿名函数(lambda)解决此问题的可能方法。

def gerMaxA(bValue):
  temporary_d = -999.99
  temporary_a = 0
  for i in test:
      if i['b'] == bValue:
          if i['d'] > temporary_d:
              temporary_a = i['a']
              temporary_d = i['d']
          elif i['d'] == temporary_d:
              if i['a'] >= temporary_a:
                  temporary_a = i['a']
  ans = (temporary_a, temporary_d)
  return ans

赞赏任何见解。

卡尔·克内希特尔

但是,我想知道优化此方法或使用匿名函数(lambda)解决此问题的可能方法。

“优化”是一个红色的鲱鱼-您不能简单地在空隙中简单地“优化”某些东西,必须针对某种质量(速度,内存使用率等)对其进行优化

相反,我将展示如何使代码更简单,更优雅。从理论上讲,这对于Stack Overflow来说是题外话,但是IMX,如果我尝试将人员发送到其他地方,该系统将无法很好地工作。

给定“ b”值

这意味着我们将选择满足条件的列表元素(即,'b'值与目标匹配)。另一个说法是过滤; 而Python确实有一个内置的filter功能,它通常是更清洁和更Python使用理解产生表达用于这一目的。由于我们将对结果进行进一步处理,因此我们不应该选择。

我需要找到“ d”的最大值

更准确地说:您看到的元素具有的最大值'd'或者,就像我们想在Python世界中想到的那样,最大元素由为主键 'd'这是使用max函数内置的由于我们将数据直接馈送到该函数,因此我们不需要构建容器,因此我们将为第一步选择一个生成器表达式

第一步看起来像这样,从左到右依次是:

(element for element in test if element['b'] == b_value)

“A发生器(())产生:所述elementfor每个elementFOUND in test,但仅包括它ifelement['b']值是== b_value”。

在第二步中,我们将max调用包装起来,并提供适当的key功能。实际上,这是我们可以使用的位置lambda

max(
    (element for element in test if element['b'] == b_value),
    key=lambda element:(element['d'], element['a'])
)

lambda是将给定element值转换为该对值的函数;max然后将根据lambda每个值产生的值比较过滤后的dict

或者,我们可以使用命名函数-lambda是同一件事,只是没有名称,并且对其内可以执行的操作有限制:

def my_key(element):
    return element['d'], element['a']

# and then we do
max((element for element in test if element['b'] == b_value), key=my_key)

或者我们可以使用标准库:

from operator import itemgetter
max((element for element in test if element['b'] == b_value), key=itemgetter('d', 'a'))

当然,最后一步只是['a']max结果中提取

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python:编写函数以检查列表并返回值或无

来自分类Dev

给定一个列表字典,是否存在一种比较每个列表的第i个元素并提取最大值的pythonic智能方法?

来自分类Dev

如何返回最大值的对应日期

来自分类Dev

输入对应的变量后,如何使函数返回值?

来自分类Dev

Python Max 函数 - 在字典中查找最大值

来自分类Dev

排序字典并输出对应于最大值的键?

来自分类Dev

如何在python中从给定范围的给定函数中找到最大值?

来自分类Dev

Python:选择键,字典中与给定列表相对应的值

来自分类Dev

MySQL的最大值对应

来自分类Dev

应用自定义函数后获得字典最大值的Pythonic方式

来自分类Dev

Max()函数不返回最大值

来自分类Dev

函数不返回输入到数组中的最大值和最小值

来自分类Dev

查找给定数量的输入的函数的最大返回值和相应的输入

来自分类Dev

在字典中将字典值与列表进行比较,并在Python中按列表的顺序返回键

来自分类Dev

根据 Python 中的条件返回字典中最大值的键

来自分类Dev

为什么我的递归函数不返回列表的最大值

来自分类Dev

从数字列表返回3个最大值的函数错误

来自分类Dev

从python列表中获取使函数最大化以及最大值的项目

来自分类Dev

在Clojure中以最大值分割向量-更好的方法?

来自分类Dev

如何编写使用Scheme来计算整数列表的最大值和最小值的函数

来自分类Dev

获取字典列表的最大值索引

来自分类Dev

在包含列表的字典中查找最大值

来自分类Dev

如何在字典中查找列表的最大值

来自分类Dev

在包含列表的字典中查找最大值

来自分类Dev

带有字典的列表中的最大值

来自分类Dev

查找列表的最大值(Python)

来自分类Dev

Python-返回字典键,将字典值与列表进行比较

来自分类Dev

Python:访问列表中的字典,更好的方法

来自分类Dev

返回字典值的python函数

Related 相关文章

  1. 1

    Python:编写函数以检查列表并返回值或无

  2. 2

    给定一个列表字典,是否存在一种比较每个列表的第i个元素并提取最大值的pythonic智能方法?

  3. 3

    如何返回最大值的对应日期

  4. 4

    输入对应的变量后,如何使函数返回值?

  5. 5

    Python Max 函数 - 在字典中查找最大值

  6. 6

    排序字典并输出对应于最大值的键?

  7. 7

    如何在python中从给定范围的给定函数中找到最大值?

  8. 8

    Python:选择键,字典中与给定列表相对应的值

  9. 9

    MySQL的最大值对应

  10. 10

    应用自定义函数后获得字典最大值的Pythonic方式

  11. 11

    Max()函数不返回最大值

  12. 12

    函数不返回输入到数组中的最大值和最小值

  13. 13

    查找给定数量的输入的函数的最大返回值和相应的输入

  14. 14

    在字典中将字典值与列表进行比较,并在Python中按列表的顺序返回键

  15. 15

    根据 Python 中的条件返回字典中最大值的键

  16. 16

    为什么我的递归函数不返回列表的最大值

  17. 17

    从数字列表返回3个最大值的函数错误

  18. 18

    从python列表中获取使函数最大化以及最大值的项目

  19. 19

    在Clojure中以最大值分割向量-更好的方法?

  20. 20

    如何编写使用Scheme来计算整数列表的最大值和最小值的函数

  21. 21

    获取字典列表的最大值索引

  22. 22

    在包含列表的字典中查找最大值

  23. 23

    如何在字典中查找列表的最大值

  24. 24

    在包含列表的字典中查找最大值

  25. 25

    带有字典的列表中的最大值

  26. 26

    查找列表的最大值(Python)

  27. 27

    Python-返回字典键,将字典值与列表进行比较

  28. 28

    Python:访问列表中的字典,更好的方法

  29. 29

    返回字典值的python函数

热门标签

归档