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

如何基于_xxkg字符串匹配对两个文件路径列表分组?

问题描述

我有如下两个文件路径列表:

L3 = ['D://carrot_25kg', 'D://banana_5kg', 'D://apple_50kg']
L4 = ['D://box3_5kg-mark', 'D://box1_25kg-dan', 'D://box2_50kg-jack']

需要将文件按如下形式分组:

result = [['D://carrot_25kg', 'D://box1_25kg-dan'],
          ['D://banana_5kg', 'D://box3_5kg-mark'],
          ['D://apple_50kg', 'D://box2_50kg-jack']] #顺序无关

匹配规则为基于“_xxkg”字符串。我尝试了以下代码:

from collections import defaultdict
from itertools import chain    

d = defaultdict(list)

for path in chain(L3, L4):
    suffix = path.split('_')[-1]
    d[suffix].append(path)

但得到的结果不符合预期:

defaultdict(<class 'list'>, {'25kg': ['D://carrot_25kg'], '5kg': ['D://banana_5kg'], '50kg': ['D://apple_50kg'], '5kg-mark': ['D://box3_5kg-mark'], '25kg-dan': ['D://box1_25kg-dan'], '50kg-jack': ['D://box2_50kg-jack']})

请问该如何实现需求?

解决方案

之前的代码问题在于,拆分后缀时直接取了split('_')[-1],但对于L4里的路径,这会把5kg-mark这类带额外后缀的字符串全部当成键,导致和L3里的5kg无法匹配。

正确的做法是提取出路径中_xxkg的核心标识,以下是两种可行的实现方式:

方法1:字符串切片定位

通过查找kg和对应下划线的位置,精准提取匹配键:

from collections import defaultdict
from itertools import chain    

d = defaultdict(list)

for path in chain(L3, L4):
    # 找到'kg'的结束位置
    kg_end = path.find('kg') + 2
    # 从kg结束位置往前找最近的下划线
    underscore_pos = path.rfind('_', 0, kg_end)
    # 提取_xxkg作为分组键
    key = path[underscore_pos:kg_end]
    d[key].append(path)

# 将字典值转为列表得到结果
result = list(d.values())

方法2:正则表达式匹配

用正则匹配_\d+kg模式,更灵活适配数字长度变化:

import re
from collections import defaultdict
from itertools import chain    

# 匹配下划线+数字+kg的模式
pattern = re.compile(r'_\d+kg')
d = defaultdict(list)

for path in chain(L3, L4):
    match = pattern.search(path)
    if match:
        key = match.group()
        d[key].append(path)

result = list(d.values())

两种方法都能得到预期的分组结果,输出示例:

[['D://carrot_25kg', 'D://box1_25kg-dan'], ['D://banana_5kg', 'D://box3_5kg-mark'], ['D://apple_50kg', 'D://box2_50kg-jack']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 23:47:39