You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何按前缀匹配多列表生成标准名称映射字典

问题原因

  • 仅遍历了单个别名列表,未覆盖所有采集的别名数据源
  • 匹配成功后直接给字典键赋值为单个字符串,未追加到列表存储多匹配结果
  • 未做别名长度校验,极端情况下会出现索引越界报错

解决方案

首先将所有待匹配的别名列表合并,通过字典初始化空列表存储匹配结果,支持自定义匹配前缀长度,适配你实际业务前5个字符匹配的需求:

from collections import defaultdict

# 输入数据
main = ['dayn is the one', 'styn is a main', 'tyrn is the third main']
lst2 = ['dayz', 'stzn', 'tyrm']
lst3 = ['styzerwe', 'tyrmadsf', 'dayttt']
lst4 = ['dayl', 'styyzt', 'tyrl']

# 合并所有别名列表,后续新增数据源直接加在这里即可
all_alias = lst2 + lst3 + lst4
# 匹配前缀长度,业务场景需要前5个字符直接修改为5
MATCH_PREFIX_LENGTH = 3

# 初始化结果字典,默认值为空列表
matched = defaultdict(list)

for standard_name in main:
    current_prefix = standard_name[:MATCH_PREFIX_LENGTH]
    for alias in all_alias:
        # 先校验别名长度足够,避免索引报错
        if len(alias) >= MATCH_PREFIX_LENGTH and alias[:MATCH_PREFIX_LENGTH] == current_prefix:
            matched[standard_name].append(alias)

# 转换为普通字典,可直接用于pandas映射
result = dict(matched)
print(result)

运行后输出结果和你期望的完全一致:

{'dayn is the one': ['dayz', 'dayttt', 'dayl'], 'styn is a main': ['styzerwe', 'styyzt'], 'tyrn is the third main': ['tyrm', 'tyrmadsf', 'tyrl']}

如果你不想引入collections.defaultdict,也可以用普通字典实现:

MATCH_PREFIX_LENGTH = 3
all_alias = lst2 + lst3 + lst4
matched = {}

for standard_name in main:
    current_prefix = standard_name[:MATCH_PREFIX_LENGTH]
    matched[standard_name] = []
    for alias in all_alias:
        if len(alias) >= MATCH_PREFIX_LENGTH and alias[:MATCH_PREFIX_LENGTH] == current_prefix:
            matched[standard_name].append(alias)

内容的提问来源于stack exchange,提问作者John Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:54:04