查找多个列表中所有重叠的记录
如何在多个列表中找到重叠的记录(大约100个)?
dct = {'One': [1,2,3],
'Two': [3],
'Three': [0,1,5],
'Four': [2,5,10,11]}
我在规划阶段遇到了困难,如果我想画一个流程图,应该包含哪些步骤呢?
我的解决方案是将每个列表与其他所有列表进行比较,除了一个列表,但这样会用到很多循环,我觉得应该有更好的方法。我知道有 set.intersection()
这个函数,但我该如何在这里应用它来处理多个列表呢?
输出需要计算在每个列表中重复的数字,也就是说:
[1, 2, 3, 5]
2 个回答
-1
如果我理解这个问题没错的话,你可以在遍历列表的时候,只走一遍就创建一个值的映射。比如说,1
可以在 ["one", "three"...
] 这个列表里找到。
includes = {
{1: ['One', 'Three'],
...
}
如果新字典中的任何一个列表值的长度和最初字典的键的数量相等,那么这个值就出现在所有的初始列表里。
1
只需要把字典反转一下:
dct = {'One': [1,2,3],
'Two': [3],
'Three': [0,1,5],
'Four': [2,5,10,11]}
rev_dct = {}
for k in dct:
for val in dct[k]:
if val in rev_dct:
rev_dct[val].append(k)
else:
rev_dct[val] = [k]
rev_dct
的输出结果:
{1: ['One', 'Three'],
2: ['One', 'Four'],
3: ['One', 'Two'],
0: ['Three'],
5: ['Three', 'Four'],
10: ['Four'],
11: ['Four']}