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
匹配。”