python3中max函数与lambda函数的使用

it2025-09-22  9

最近学习python中,遇到了一个案例:

已知若干用户名字及其喜欢的电影清单,现有某用户已看过并喜欢一些电影,然后根据已有数据,查找与该用户爱好最相似的用户,也就是看过并喜欢的电影与该用户最接近的用户,然后从那个用户喜欢的电影中选取一个当前用户还没看过的电影,然后推荐。

示例代码如下:

from random import randrange data = {'user'+str(i):{'film'+str(randrange(1,10)) for j in range(randrange(15))} for i in range (10)} user = {'film1','film2','film3'} similarUser, films = max(data.items(), key=lambda item: len(item[1]&user)) print('历史数据·:') for u, f in data.items(): print(u,f,sep=':') print('和你最相似的用户时:',similarUser) print('他最喜欢看的电影是:',films) print('他看过的电影中你还没看过的有:',films-user)

看完就迷在第四行,上网搜了一下: 第一:max函数参数有两个,第一个是可迭代对象,第二个是函数; 第二:key后面跟的也是一个函数,函数的返回值为key; 第三:lambda函数,也称lambda表达式,有两个参数,即 lambda item1: item2 ,用法为将参数item1代入item2中,然后有一个新的返回值,用来作为key值。

这样示例代码就解释通了: 1)data为一个字典;items() 为字典中的一个函数,相当于将字典变为一个列表,列表中的每一个元素均是一个元组,对应着字典中的键和值。

dict_items([('user0', {'film6', 'film7', 'film8', 'film9', 'film2', 'film4', 'film3'}), ('user1', {'film1', 'film6', 'film7', 'film8', 'film9', 'film2', 'film5'}), ('user2', {'film1', 'film6', 'film7', 'film8', 'film9', 'film4', 'film3'}), ('user3', {'film8'}), ('user4', {'film7', 'film8', 'film9', 'film2', 'film5', 'film4', 'film3'}),

2)data.items()作为一个可迭代对象传入lambda函数中的参数item中,(这里的item仅仅是一个参数哦),其中item[1]正是每个用户的电影清单。

最后带一下运行结果:

历史数据·: user0:{'film7', 'film4', 'film3', 'film5', 'film2', 'film8', 'film6'} user1:{'film7', 'film4', 'film5', 'film2', 'film8', 'film1'} user2:{'film4', 'film5', 'film2', 'film8', 'film1'} user3:{'film7', 'film4', 'film3', 'film5', 'film2', 'film8', 'film6', 'film1'} user4:{'film7', 'film4', 'film3', 'film5', 'film2', 'film8', 'film6', 'film1'} user5:{'film4', 'film3', 'film5', 'film6', 'film1'} user6:{'film5', 'film9', 'film6', 'film4'} user7:{'film7', 'film4', 'film3', 'film5', 'film2', 'film8', 'film1'} user8:{'film7', 'film3', 'film2', 'film8', 'film6', 'film1'} user9:{'film7', 'film4', 'film2', 'film6', 'film1'} 和你最相似的用户时: user3 他最喜欢看的电影是: {'film7', 'film4', 'film3', 'film5', 'film2', 'film8', 'film6', 'film1'} 他看过的电影中你还没看过的有: {'film7', 'film4', 'film5', 'film8', 'film6'} Process finished with exit code 0
最新回复(0)