列表的交集,它们是字典中的值

时间:2015-08-17 11:01:59

标签: python list dictionary lambda

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中执行此操作?

3 个答案:

答案 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())
相关问题