实际案列:
西班牙甲级足球联赛,每轮球员进球统计:
第一轮:{'苏亚雷斯':1,'梅西':2,'本泽马':1,'C罗':3......}
第二轮:{'苏亚雷斯':1,'C罗':1,'格里兹曼':2,'贝尔':1......}
第三轮:{'苏亚雷斯':1,'托雷斯':1,'贝尔':1,'内马尔':1......}
....
统计出前N轮,每场比赛都有进球的球员。
解决方案:
利用集合的交集操作
1.使用keys方法,得到一个字典keys的集合
2.使用map函数,得到所有字典keys的集合
3.使用reduce函数,取所有字典的keys的集合的交集
from random import randint,sample
from functools import reduce
s1 = {x:randint(1,4) for x in sample('abcdefgh',randint(3,6))}
s2 = {x:randint(1,4) for x in sample('abcdefgh',randint(3,6))}
s3 = {x:randint(1,4) for x in sample('abcdefgh',randint(3,6))}
print(s1,s2,s3,sep="\n")
# 原始方法
res = []
for k in s1:
if k in s2 and k in s3:
res.append(k)
print(res)
# 方式二:集合
li = [x.keys() for x in (s1,s2,s3)]
res = reduce(lambda x,y:x&y,li)
print(res)