Python找出多个字典中的公共键

1, 使用reduce函数配合map函数进行操作

#!/usr/bin/env python3

from random import randint, sample
from functools import reduce

d1 = {k: randint(1,3) for k in sample('abcdefgh', randint(4,6))}    //*sample为随机取样,第二个参数为取样的个数
d2 = {k: randint(1,3) for k in sample('abcdefgh', randint(4,6))}
d3 = {k: randint(1,3) for k in sample('abcdefgh', randint(4,6))}
dict_all = [d1, d2, d3]                                             //*将所有字典放进一个列表
print('{}\n{}\n{}'.format(d1, d2, d3))                              //*打印这三个随机字典的数据
print(reduce(lambda a, b: a & b, map(dict.keys, dict_all)))         //*找出这三个字典里的公共键并打印
[[email protected] ~]# ./learn.py
{'h': 1, 'd': 3, 'c': 3, 'b': 2}
{'h': 1, 'b': 3, 'a': 2, 'e': 1, 'f': 3}
{'f': 3, 'h': 3, 'b': 1, 'd': 3, 'g': 3}
{'h', 'b'}

2, reduce函数简单使用

In [1]: from functools import reduce                                                                     

In [2]: reduce(lambda a, b: a + b,[1, 2, 3, 4, 5, 6])    //*相当于从1+2+3+4+5+6,第一次a取值1,b取值2,然后相加的结果3再赋值给a,b取列表内的下一个值,以此类推
Out[2]: 21

In [3]: reduce(lambda a, b: a + b,range(1, 101))         //*从这里更能看出来了,小高斯的故事,计算从1加到100的值
Out[3]: 5050

3, map函数简单使用

In [1]: map(lambda a: a ** 5,[1, 2, 3, 4, 5])            //*map函数一次从列表里取出值,然后进行**5操作,并生返回迭代器
Out[1]: <map at 0x7f27e82213c8>

In [2]: list(map(lambda a: a ** 5,[1, 2, 3, 4, 5]))      //*使用列表的方式打印结果
Out[2]: [1, 32, 243, 1024, 3125]

In [3]: map1 = map(lambda a: a ** 4,[1, 2, 3, 4, 5])     //*将map的结果复制给map1变量
In [4]: next(map1)                                       //*迭代map1的数据
Out[4]: 1

In [5]: next(map1)                                                                                       
Out[5]: 16

In [6]: next(map1)                                                                                       
Out[6]: 81

In [7]: next(map1)                                                                                       
Out[7]: 256

In [8]: next(map1)                                                                                       
Out[8]: 625

In [9]: next(map1)                                       //*内容已经全部迭代完毕,抛出异常
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-9-dfa5d875ff9f> in <module>
----> 1 next(map1)