字典中的值列表的交集

2024-09-30 02:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

Python 2.7

数据结构是这样的

hitdict = {'A':[1,2,3,4], 'B':[2,3,6,5], 'C':[2,3,7,8]}

注意键:值对是可变的。 我要A,B,C的交点:

^{pr2}$

对于两个或多个列表的交集,大多数答案建议使用set class或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中实现这一点?在


Tags: oflambda函数答案数据结构列表foritems
3条回答

使用map将列表转换为集合,使用reduce应用交集。执行:

reduce(lambda x,y: x&y, map(set, hitdict.values()))

它提供:

^{pr2}$

你可以做点什么比如:在

reduce(lambda value1, value2: set(value1).intersection(set(value2)), hitdict.values())

您可以使用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])

请注意,上面的生成器还可以确保您的项目是一个接一个地喂,以减少。在

相关问题 更多 >

    热门问题