如何快速找到多个字典中的公共键(key)
实际案例:统计每场都有进球的球员
如下: 字典中的键为球员名字, 值为进球数
In [22]: s1
Out[22]: {'a': 4, 'b': 3, 'e': 3, 'f': 4}
In [23]: s2
Out[23]: {'a': 4, 'b': 2, 'c': 3, 'd': 1, 'e': 1, 'f': 3}
In [24]: s3
Out[24]: {'b': 3, 'd': 4, 'f': 3}
思路:
转化成集合求交集的问题,
利用字典的viewkeys()函数获取字典的所有键(其返回值类似于集合)。
code:
In [33]: s1.viewkeys() & s2.viewkeys() & s3.viewkeys()
Out[33]: {'b', 'f'}
优化:
利用map和reduce函数处理批量情况。
In [34]: map(dict.viewkeys, [s1, s2, s3])
Out[34]:
[dict_keys(['a', 'b', 'e', 'f']),
dict_keys(['a', 'c', 'b', 'e', 'd', 'f']),
dict_keys(['b', 'd', 'f'])]
In [35]: reduce(lambda a, b: a & b, map(dict.viewkeys, [s1, s2, s3]))
Out[35]: {'b', 'f'}