问题提出
假设我们有4个字典,我们如何快速知道这四个字典中的公共键?
# 生成4个字典, 第i个字典代表第i轮{“进球球员":进球数}
s1 = {x: randint(1, 4) for x in sample('abcdefg', randint(3, 6))}
s2 = {x: randint(1, 4) for x in sample('abcdefg', randint(3, 6))}
s3 = {x: randint(1, 4) for x in sample('abcdefg', randint(3, 6))}
s4 = {x: randint(1, 4) for x in sample('abcdefg', randint(3, 6))}
法一:迭代法
直接暴力迭代即可,但是效率不高。
# 1.迭代法
res = [] # 公共键
for k in s1:
if k in s2 and k in s3 and k in s4:
res.append(k)
法二:集合法
使用集合法进行交集运算,得到公共集合。
# 2. 集合法
print(set(s1.keys()) & set(s2.keys()) & set(s3.keys()) & set(s4.keys()))
现在推广到有n个字典的情况下,我们可以这样使用集合法;
# 3.n个字典使用集合法
from functools import reduce # 使用reduce函数
st = reduce(lambda a, b: a & b, map(set, [s1, s2, s3, s4])) # 把前面计算的结果当初参数继续与后面的数进行运算,最终只剩下一个值
print(st)