快速找到多个字典中的公共键
from random import randint,sample
sample(‘abcdefg’,3)# [‘c’,‘b’,‘g’]
sample(‘abcdefg’,randint(3,6))
s1 = {x: randint(1,4) for x in sample(‘abcdefg’,randint(3,6))}
s2 = {x: randint(1,4) for x in sample(‘abcdefg’,randint(3,6))}
s3 = {x: randint(1,4) for x in sample(‘abcdefg’,randint(3,6))}
s4 = {x: randint(1,4) for x in sample(‘abcdefg’,randint(3,6))}
res = []
for k in s1:
if k in s2 and k in s3:
res.append(k)
利用集合set的交集操作
使用字典的viewkeys()方法,得到一个字典keys的集合列表
使用map函数,得到所有字典的keys的集合
使用reduce函数,取得所有字典的keys集合交集
s1.viewkeys() & s2.viewkeys() # 列表交集操作,得到公共值元组
map(dict.viewkeys,[s1,s2,s3])
#第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值
#Python 2.x 返回列表。
#Python 3.x 返回迭代器。—> list(map())
reduce(lambda a,b:a & b,map(dict.viewkeys,[s1,s2,s3]))
#用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个元素用 function 函数运算,最后得到一个结果。
#!/usr/bin/python
#-- coding: UTF-8 --
def add(x, y) : # 两数相加
return x + y
sum1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
print(sum1)
print(sum2)
#Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数:
from functools import reduce