Python 如何在子字符串匹配时映射两个列表中的值

Python 如何在子字符串匹配时映射两个列表中的值,python,list,Python,List,我在两个不同的列表中列出了值: list1 = [ "1003_0123_20200821091044_ion_fri_jl.dat", "8005_0086_20200821090605_ion_fri_jl.dat", "1003_0123_20200821091999_ion_fri_jl.dat", ] list2 = [ "IMM CCA CADD USD GAAP_20210331

我在两个不同的列表中列出了值:

list1 = [
    "1003_0123_20200821091044_ion_fri_jl.dat",
    "8005_0086_20200821090605_ion_fri_jl.dat",
    "1003_0123_20200821091999_ion_fri_jl.dat",
]

list2 = [
    "IMM CCA CADD USD GAAP_202103311352_20200821091999_FRI",
    "ICM CCA CADD USD GAAP_202103311352_20200821090605_FRI",
    "CCA CTAD USD GAAPA_202103311352_20200821091044_FRI",
]
我想对具有通过
str.split(“”“)[2]
获得的相同子字符串的值进行配对。例如,
list1
中的第一个元素具有子字符串
20200821091044
,该子字符串与
list2
中的第三个元素相匹配。然后我想得到如下匹配的值:

[
    (
        "1003_0123_20200821091044_ion_fri_jl.dat",
        "CCA CTAD USD GAAPA_202103311352_20200821091044_FRI",
    ),
    (
        "8005_0086_20200821090605_ion_fri_jl.dat",
        "ICM CCA CADD USD GAAP_202103311352_20200821090605_FRI",
    ),
    (
        "1003_0123_20200821091999_ion_fri_jl.dat",
        "IMM CCA CADD USD GAAP_202103311352_20200821091999_FRI",
    ),
]

或者以字典格式。

循环第一个列表,提取子字符串,循环第二个列表并找到匹配项

results = []

for x in list1:
    substring = x.split("_")[2]

    for y in list2:
        if substring in y:
            results.append((x, y))

您之前的问题编辑说“或以字典格式”,这就是我将在此处使用的内容:

导入集合
分组=集合.defaultdict(列表)
对于列表1+列表2中的项:#或itertools.chain(列表1,列表2)
分组[项目.拆分(''.'[2]]。追加(项目)
分组的是:

defaultdict(列表、,
{'20200821091044':['1003_0123_20200821091044_ion_fri_jl.dat',
“CCA CTAD美元GAAPA_202103311352_20200821091044_FRI”,
‘20200821090605’:[‘8005_0086_20200821090605_ion_fri_jl.dat’,
“ICM CCA CADD美元GAAP_202103311352_20200821090605_FRI”,
‘20200821091999’:['1003_0123_20200821091999_ion_fri_jl.dat',
“IMM CCA CADD美元公认会计原则(202103311352(20200821091999(周五)])
list(grouped.values())
以成对列表的形式获取:

,
“CCA CTAD美元GAAPA_202103311352_20200821091044_FRI”,
['8005_0086_20200821090605_ion_fri_jl.dat',
“ICM CCA CADD美元GAAP_202103311352_20200821090605_FRI”,
['1003_0123_20200821091999_ion_fri_jl.dat',
“IMM CCA CADD美元GAAP_202103311352_20200821091999_FRI”]]

您已经很好地描述了这个问题,其中包含了一个小片段,说明了如何匹配它们,但没有尝试使用它(代码)。@GG。你对这个问题的编辑相当程度上改变了OP文章的含义。首先,他们不希望仅仅是子字符串匹配,他们希望匹配split的第2个元素。虽然您的答案在这种情况下有效,但数据中的更改有点“脆弱”。具体来说,
list1
中的最后一个数字组可以与
list2
中的元素匹配,该元素将该数字组作为第一个数字组,而不是问题中最初需要的第二个数字组。诚然,在这种情况下,
list2
中的数字长度不同,因此不会发生冲突-但这是解决方案中隐含的隐藏假设。也许您可以添加“如果
list2
的第一个数字组永远无法与
list1
中的数字组匹配,那么在字符串中执行一个简单的
substr
匹配。”