当前位置: 首页 > 知识库问答 >
问题:

在Python中匹配包含子列表的可变长度列表中的值

水睿
2023-03-14

我试图遍历一个字典,其中每个键都包含一个列表,该列表依次包含0到20个子列表。目标是迭代字典1的值,检查它们是否在字典2的任何子列表中用于相同的密钥,如果是,则将1添加到计数器中,而不再次考虑子列表。

代码看起来有点像这样:

dict1={"key1":[[1,2],[6,7]],"key2":[[1,2,3,4,5,6,7,8,9]]}
dict2={"key1":[[0,1,2,3],[5,6,7,8],[11,13,15]],"key2":[[7,8,9,10,11],[16,17,18]]}

for (k,v), (k2,v2) in zip(dict1.iteritems(),dict2.iteritems()):
    temp_hold=[]
    span_overlap=0
    for x in v:
        if x in v2 and v2 not in temp_hold:
            span_overlap+=1
            temp_hold.append(v2)
        else:
            continue
    print temp_hold, span_overlap

这显然不起作用,主要是因为代码无法通过列表和子列表进行分层检查,部分原因是可能不正确的迭代语法。我对嵌套循环和迭代没有最大的把握,这使得这很痛苦。另一种选择是首先使用以下方法将子列表连接到一个列表中:

v=[y for x in v for y in x]

这将很容易检查一个值是否在另一个字典中,但是我就失去了专门处理包含迭代的部分值的子列表的能力,也不能只计算一次子列表。

所需的输出是key1的计数为2,key2的计数为1,并且能够处理匹配的子列表以进行进一步分析。

共有1个答案

孔正文
2023-03-14

这里有一个解决方案。我首先将列表列表转换为集合列表。如果您对列表有任何控制,请设置它们。

def matching_sublists(dict1, dict2):
    result = dict()
    for k in dict1:
        assert(k in dict2)
        result[k] = 0
        A = [set(l) for l in dict1[k]]
        B = [set(l) for l in dict2[k]]
        for sublistA in A:
            result[k] += sum([1 for sublistB in B if not sublistA.isdisjoint(sublistB) ])
    return result


if __name__=='__main__':
    dict1={"key1":[[1,2],[6,7]],"key2":[[1,2,3,4,5,6,7,8,9]]}
    dict2={"key1":[[0,1,2,3],[5,6,7,8],[11,13,15]],"key2":[[7,8,9,10,11],[16,17,18]]}
    print(matching_sublists(dict1, dict2))
 类似资料:
  • 本文向大家介绍计算Python列表中包含给定元素的子列表,包括了计算Python列表中包含给定元素的子列表的使用技巧和注意事项,需要的朋友参考一下 给定列表中的元素也可以作为另一个字符串出现在另一个变量中。在本文中,我们将查看给定列表中给定流出现了多少次。 随着范围和镜头 我们使用range和len函数来跟踪列表的长度。然后使用in条件查找字符串在列表中作为元素出现的次数。每当满足条件时,初始化为

  • 问题内容: python中是否有内置函数返回两个列表的最长公共子序列的长度? 我试图找到最长的公共子序列,然后得到它的长度,但是我认为必须有一个更好的解决方案。 问题答案: 您可以轻松地将LCS重新装配为LLCS: 演示: 如果您想要最长的公共 子字符串 (一个 不同 但相关的问题, 子 序列是连续的),请使用: 这与动态编程方法非常相似,但是我们跟踪到目前为止找到的最大长度(因为不再保证表中的最

  • 我试图使用org.hamcrest.matchers.contains(java.util.list >),但是编译器告诉我它无法解析该方法。 我甚至尝试了Hamcrest在这里给出的示例,但得到了相同的编译错误: 但随后我得到了另一个编译错误: 有没有办法恰当地使用这种方法?

  • 我有一个有趣的两难处境: 我有一门课,假设它叫做文件柜。 FileCabinet存储文件的链接列表,称为“filesInCabinet”。 在每个文件中,还有另一个文件链接列表,称为“relatedFiles”。 所以它看起来像这样,例如: 文件柜1 文件1 文件3 文件3 文件1 文件2 文件2 我遇到的问题是,嵌套列表(“relatedFiles”)包含文件的单独实例,因此实际上更像: 文件柜

  • 我发现它能够以这种方式或通过抛出进行子类化,没有问题,但类型检查。 当您的子类列表工作时,方式相同。 如何才能正确子类化tuple?谢谢你的建议。

  • 我需要从一个列表中追加一些重复的值到一个子列表中,让我用一个例子来解释: 我有一个名为的变量,它包含大写字母字符串和符号。 我的最终目标是拥有这个数组: 在示例中,我需要将所有的符号分组到原始中的子列表中,我想过在数组中迭代,找到当前附近的所有符号,然后创建第二个数组,但我想也许还有更多的pythonic我可以做的,有什么想法吗?