当前位置:   article > 正文

python 使用 max函数求字典的最大值(lambda表达式)_python编写max函数求两个数最大值

python编写max函数求两个数最大值

 (一)铺垫

  1. ------------------------------原始做法-------------------------------
  2. # 求两个数的中的最大的值
  3. def func(x, y):
  4. if x < y:
  5. return y
  6. else:
  7. return x
  8. ret = func(30, 20)
  9. print(ret) # 30
  10. -----------------------------匿名函数做法--------------------------------
  11. func = lambda x, y: y if x < y else x
  12. # # 注意if和else 没有 : 不能换行,if判断体写在判断条件前面
  13. ret = func(11, 2)
  14. print(ret) # 11

(二) 使用 max函数求字典的最大值

 1.先看一个简单的,我起初认为,打印的值应该是100,121,144中最大的144,然而是根据这几个数,比较大小后,输出了原数据12。

  1. num = [10, 11, 12]
  2. print(max(num, key=lambda i: i * i)) # 12

2.开始看题了

原理:默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values()。

max函数要求第一个参数是可迭代内容,这里我们的dic默认迭代key,第二个参数是一个函数,对迭代的每一项进行处理,将处理

后的结果统一起来进行比较大小,返回大的一项的原数据,看下图:

 下面这个就是经x处理,也就是没处理罢了,依次迭代k1, k2, k3得k3最大,返回k3

  1. dic = {'k1': 10, 'k2': 200, 'k3': 20}
  2. ret = max(dic, key=lambda x: x)
  3. print(ret) # k3

 再看复杂一点的,代码下面是分析:

  1. lst = [
  2. {'name': 'egon', 'price': 100},
  3. {'name': 'rdw', 'price': 666},
  4. {'name': 'zat', 'price': 1}
  5. ]
  6. ret = max(lst, key=lambda dic: dic['price']) # 指定比较内容
  7. print(ret) # {'price': 666, 'name': 'rdw'}

 分析:

  1. (1)先取{'name': 'egon', 'price': 100},以{'name': 'egon', 'price': 100}为参传入匿名函数作为dic,
  2. 经dic['price']处理得100,
  3. (2)再取{'name': 'rdw', 'price': 666},以{'name': 'rdw', 'price': 666}为参传入匿名函数作为dic,
  4. 经dic['price']处理得666,
  5. (3)最后取{'name': 'zat', 'price': 1},以{'name': 'zat', 'price': 1}为参传入匿名函数作为dic,
  6. 经dic['price']处理得1
  7. (4)集中比较100,666,1得666最大,返回666对应的参数dic,即{'name': 'rdw', 'price': 666}。
  8. (5)因为返回是字典,所以可能乱序,即上面结果{'price': 666, 'name': 'rdw'}

总结与发现:

不论匿名函数怎么处理参数,返回的不是处理后的结果,而是结果对应的参数本身。下面这些图的红圈圈才是返回的东西。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/357293
推荐阅读
相关标签
  

闽ICP备14008679号