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'}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容