实际案例:统计每场都有进球的球员
如下: 字典中的键为球员名字, 值为进球数

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'}

标签: none

添加新评论