我有一个不同长度的词典。每个条目都有一个名称和一个列表,如下所示:
somedict = {'Name': [1, 2, 3], 'Name2': [], 'Name3': [2,3] }
如何获得以下列表的交集?我需要动态地做,我不知道dict会持续多久。
对于上面的列表,我知道交叉点是空的。但是对于
somedict = {'Name': [1, 2, 3], 'Name3': [2,3] }
它应该返回
[2, 3]
答案 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())
创建一个生成器,它生成转换为集合的字典项的每个值,生成器unpacked到set.intersection
函数。< / p>