Python 2.7
数据结构是这样的,
hitdict = {'A':[1,2,3,4], 'B':[2,3,6,5], 'C':[2,3,7,8]}
注意key:value对的数量是可变的。 我想要A,B,C的交集:
[2,3]
对于两个或更多列表的交集,大多数答案建议设置类或lambda函数。 例如。 intersection of lists of list,使用lambda functions
以及之前的question,其中a,b,c
是列表
>> set(a) & set(b) & set(c)
我有很多这样的词典,列表数量可变。
我的主要困惑是如何使用上面的set(),因为
如果我使用for hitdict.items()
进行循环,它将一次只给出一个k:v对。因此,下面的代码不正确。
for (k,v) in hitdict.items():
common = set(hitdict[k]) + set(hitdict[k+1])
如何在Python中执行此操作?
答案 0 :(得分:3)
使用map
将列表转换为集合,使用reduce
来应用交集。做:
reduce(lambda x,y: x&y, map(set, hitdict.values()))
它给出了:
set([2, 3])
答案 1 :(得分:2)
您可以reduce
使用自定义lambda
并设置intersection
来执行此操作:
>>> hitdict = {'A':[1,2,3,4], 'B':[2,3,6,5], 'C':[2,3,7,8]}
>>> reduce(lambda x, y: x.intersection(y), (set(x) for x in hitdict.values()))
set([2, 3])
请注意,上面的生成器还可以确保您的项目逐个送入以减少。
答案 2 :(得分:1)
您可以执行以下操作: -
reduce(lambda value1, value2: set(value1).intersection(set(value2)), hitdict.values())