python 使用 max函数求字典的最大值(lambda表达式)

本文深入探讨Python中函数的使用,包括匿名函数、max函数的高级应用及字典操作技巧,通过实例讲解如何求最大值、处理字典数据,适合初学者和进阶学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 (一)铺垫

------------------------------原始做法-------------------------------
# 求两个数的中的最大的值

def func(x, y):
    if x < y:
        return y
    else:
        return x


ret = func(30, 20)
print(ret)               # 30

-----------------------------匿名函数做法--------------------------------

func = lambda x, y: y if x < y else x
# # 注意if和else 没有 : 不能换行,if判断体写在判断条件前面
ret = func(11, 2)
print(ret)            # 11

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

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

num = [10, 11, 12]
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

dic = {'k1': 10, 'k2': 200, 'k3': 20}

ret = max(dic, key=lambda x: x)
print(ret)    # k3

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

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

 分析:

(1)先取{'name': 'egon', 'price': 100},以{'name': 'egon', 'price': 100}为参传入匿名函数作为dic,

经dic['price']处理得100,

(2)再取{'name': 'rdw', 'price': 666},以{'name': 'rdw', 'price': 666}为参传入匿名函数作为dic,

经dic['price']处理得666,

(3)最后取{'name': 'zat', 'price': 1},以{'name': 'zat', 'price': 1}为参传入匿名函数作为dic,

经dic['price']处理得1

(4)集中比较100,666,1得666最大,返回666对应的参数dic,即{'name': 'rdw', 'price': 666}。

(5)因为返回是字典,所以可能乱序,即上面结果{'price': 666, 'name': 'rdw'}

总结与发现:

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

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值