dict中的交叉列表(两个以上)

时间:2015-12-21 12:34:16

标签: python dictionary intersection

我有一个不同长度的词典。每个条目都有一个名称和一个列表,如下所示:

somedict = {'Name': [1, 2, 3], 'Name2': [], 'Name3': [2,3] }

如何获得以下列表的交集?我需要动态地做,我不知道dict会持续多久。

对于上面的列表,我知道交叉点是空的。但是对于

somedict = {'Name': [1, 2, 3], 'Name3': [2,3] }

它应该返回

[2, 3]

1 个答案:

答案 0 :(得分:11)

通常,交集是一个设定的操作。因此,您可能希望将字典的值转换为集合,然后运行交集,就像这样

>>> set.intersection(*(set(values) for values in data.values()))
{2, 3}

如果您希望结果为列表,只需将结果集转换为列表,如此

>>> list(set.intersection(*(set(values) for values in data.values())))
[2, 3]

这里,表达式*(set(values) for values in data.values())创建一个生成器,它生成转换为集合的字典项的每个值,生成器unpackedset.intersection函数。< / p>