寻找多个字典中的公共键

来源:互联网 发布:jira mac 破解版下载 编辑:程序博客网 时间:2024/05/16 07:06

首先想到的做法,用for循环

s1 = {k:randint(1,4) for k in sample('abcxyz',randint(4,6))}s2 = {k:randint(1,4) for k in sample('abcxyz',randint(4,6))}s3 = {k:randint(1,4) for k in sample('abcxyz',randint(4,6))}#s1 = {'a':2,'x':4,'c':2,'b':4}#s2 = {'y':3,'c':1,'z':4,'b':2}#s3 = {'a';2,'c':1,'b':4,'y':3,'x':1,'z':4}l = []for x in s1:    if x in s2 and x in s3:        l.append(x) #l = ['c', 'b']

更高效的方法是先转换成集合,再求交集

#D.viewkeys() -> a set - like object providing a view on D's keyss1.viewkeys() & s2.viewkeys() & s3.viewkeys()#['c','b']

如果字典数量更多,就要考虑使用map()和reduce()

#map(function, sequence[, sequence, ...]) -> list#reduce(function, sequence[, initial]) -> valuereduce(lambda x,y:x & y, map(dict.viewkeys, [s1, s2, s3]))#set(['c', 'b'])
0 0