查找多个列表中所有重叠的记录

-3 投票
2 回答
63 浏览
提问于 2025-04-14 18:08

如何在多个列表中找到重叠的记录(大约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']}

撰写回答