情景假設:一個足球比賽中每個球員的名字和進球數保存在字典中如下所示
第一輪:{A: 2, B:1, C:1}
第二輪:{A: 2, C: 1, D:1, E: 1}
第三輪:{C:3, F: 3}
如何找出每輪都有進球的人
首先模擬數據
>>> from random import randint, sample
>>> g1 = {x: randint(1, 3) for x in sample('ABCDEFG', randint(2, 7))}
>>> g2 = {x: randint(1, 3) for x in sample('ABCDEFG', randint(2, 7))}
>>> g3 = {x: randint(1, 3) for x in sample('ABCDEFG', randint(2, 7))}
>>> g1
{'E': 2, 'G': 2}
>>> g2
{'F': 3, 'D': 1, 'A': 2, 'B': 2, 'G': 1}
>>> g3
{'C': 3, 'A': 2, 'F': 3, 'E': 2, 'D': 2, 'B': 3, 'G': 3}
利用字典的keys方法可以得到鍵的集合,再利用集合的交操作我們可以得到公共鍵
>>> g1.keys() & g2.keys() & g3.keys()
{'G'}
抽象解決這個問題的的算法,可以歸為兩種操作,一個是對每個集合取keys,另一種是兩兩求交集,于是map和reduce可以派上用場了
>>> from functools import reduce
>>> reduce(lambda x, y: x & y, map(lambda x: x.keys(), [m1, m2, m3]))
{'G'}