Python如何找到多個字典對象的公共鍵

情景假設:一個足球比賽中每個球員的名字和進球數保存在字典中如下所示
第一輪:{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,另一種是兩兩求交集,于是mapreduce可以派上用場了

>>> from functools import reduce
>>> reduce(lambda x, y: x & y, map(lambda x: x.keys(), [m1, m2, m3]))
{'G'}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容