实际案例:
- 西班牙足球甲级联赛,每轮球员进球统计
- 第一轮:{'苏亚雷斯':1,'梅西':2,'本泽马':1,'C罗':3...}
- 第二轮:{'苏亚雷斯':2,'C罗':1,'格里兹曼':2,'贝尔':1...}
- 第三轮:{'苏亚雷斯':1,'托雷斯':2,'贝尔':1,'内马尔':3...}
.....
统计出前N轮,每场比赛都有进球的球员.
首先用随机函数统计出随机函数:
from random import randint,sample
s1 = {x:randint(1,4) for x in sample('abcefg',randint(3,6))}
s2 = {x:randint(1,4) for x in sample('abcefg',randint(3,6))}
s3 = {x:randint(1,4) for x in sample('abcefg',randint(3,6))}
做法1:
res = list()
for k in s1:
if k in s2 and k in s3:
res.append(k)
比较啰嗦,而且效率不够好。
解决方案:
- 利用集合(set)的交集操作
- 使用字典的viewkeys()方法,得到一个字典keys的集合(Python3使用keys()方法)
- 使用map函数,得到所有字典的keys的集合
- 使用reduce函数,取所有字典的keys的集合的交集
解决1:
取交集
s1.keys() & s2.keys() & s3.keys()
解决2:
from functools import reduce
reduce(lambda a,b:a&b,map(dict.keys,[s1,s2,s3]))
网友评论