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

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

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

示例代码如下:

1.from random import randrange
2.data = {'user'+str(i):{'film'+str(randrange(1,10)) for j in 3.range(randrange(15))} for i in range (10)}
4.user = {'film1','film2','film3'}
5.similarUser, films = max(data.items(), key=lambda item: len(item[1]&user))
7.print('历史数据·:')
8.for u, f in data.items():
9.    print(u,f,sep=':')
10.print('和你最相似的用户时:',similarUser)
11.print('他最喜欢看的电影是:',films)
12.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
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页