首先想到的做法,用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 keys
s1.viewkeys() & s2.viewkeys() & s3.viewkeys()
#['c','b']
如果字典数量更多,就要考虑使用map()和reduce()
#map(function, sequence[, sequence, ...]) -> list
#reduce(function, sequence[, initial]) -> value
reduce(lambda x,y:x & y, map(dict.viewkeys, [s1, s2, s3]))
#set(['c', 'b'])