首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在子字符串匹配时从两个列表中映射值

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

Stack Overflow用户
提问于 2021-04-01 07:54:31
回答 2查看 108关注 0票数 2

我有两个不同的列表中的值:

代码语言:javascript
复制
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中的第三个元素匹配。然后,我希望有如下匹配的值:

代码语言:javascript
复制
[
    (
        "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",
    ),
]

或者是字典格式的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-01 08:02:36

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

代码语言:javascript
复制
results = []

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

    for y in list2:
        if substring in y:
            results.append((x, y))
票数 2
EN

Stack Overflow用户

发布于 2021-04-01 08:33:37

你的问题的前一次编辑说“或以字典的格式”,这就是我在这里要说的:

代码语言:javascript
复制
import collections

grouped = collections.defaultdict(list)
for item in list1+list2:  # or itertools.chain(list1, list2)
    grouped[item.split('_')[2]].append(item)

grouped是:

代码语言:javascript
复制
defaultdict(list,
            {'20200821091044': ['1003_0123_20200821091044_ion_fri_jl.dat',
              'CCA CTAD USD GAAPA_202103311352_20200821091044_FRI'],
             '20200821090605': ['8005_0086_20200821090605_ion_fri_jl.dat',
              'ICM CCA CADD USD GAAP_202103311352_20200821090605_FRI'],
             '20200821091999': ['1003_0123_20200821091999_ion_fri_jl.dat',
              'IMM CCA CADD USD GAAP_202103311352_20200821091999_FRI']})

或者用list(grouped.values())将它放在成对的列表中:

代码语言:javascript
复制
[['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']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66900481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档