02 Feb 2017
# 使用sample取样函数和randint随机数函数创建多个dict # 在"abcdef"中随机取字母作为key # 在"1-4"中随机取数字作为value >>> from random import randint, sample >>> d1 = {x: randint(1,4) for x in sample("abcdef", randint(3,6))} >>> d2 = {x: randint(1,4) for x in sample("abcdef", randint(3,6))} >>> d3 = {x: randint(1,4) for x in sample("abcdef", randint(3,6))} >>> print d1 {'c': 4, 'b': 4, 'e': 1, 'd': 4, 'f': 3} >>> print d2 {'b': 3, 'e': 4, 'd': 4} >>> print d3 {'a': 2, 'c': 1, 'e': 1, 'd': 4, 'f': 4}
# 根据所有的key,进行逐个判断 >>> res = [] >>> for k in 'abcdef': if k in d1 and k in d2 and k in d3: res.append(k) >>> print res ['d', 'e']
不用我多说,这个方法太sb
# dict.viewkeys会将dict的key转换成一个set,我们可以使用set的交集方法找出公共key >>> d1.viewkeys() & d2.viewkeys() & d3.viewkeys() {'d', 'e'}
# 上面的方法是确定有几个dict时,进行的操作,若是多个dict,或者不确定多少个dict时就无法使用上面的方法 # 这里我们使用两个新的函数,map和reduce,关于这两个函数的详细介绍,可以去python官网 # map函数可以将一个list中的元素全部使用一个函数来处理,返回一个list # reduce函数可以从左向右使用一个函数来处理当前元素和前两个元素被处理的结果之和 # 例如:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # ((((1+2)+3)+4)+5) >>> reduce(lambda a, b: a & b, map(dict.viewkeys, [d1, d2, d3])) {'d', 'e'}