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

如何将匹配同一键的所有值归集到单个键下?Python实现方案求助

解决文件名按前缀分组的问题

我来帮你梳理下代码里的问题,然后给出能得到预期结果的方案。

你的代码存在的几个问题:

  1. 前缀提取写法不清晰且有风险:i.split("_", 1)[-2]虽然能拿到前缀,但逻辑很绕——split("_",1)会把文件名分成两部分,[-2]取的是第一部分,不如直接用[0]直观,要是文件名格式变化(比如开头就有下划线),这种写法会出错。
  2. 错误赋值整个列表:第二个循环里dict[i] = list_dir,这会把全部文件名赋值给每个键,而不是只收集当前前缀对应的文件,这是最核心的问题。
  3. 双重循环效率低:每个前缀都要遍历整个文件名列表,既冗余又容易导致重复赋值。

正确的实现方式

方法1:基础字典写法

这种写法不需要额外导入模块,逻辑清晰易懂:

list_dir = ['192586_Sample_010_Test.pdf', '192586_Sample_020_Test.pdf', '192586_Sample_050_Test.pdf', '192120_Sample_020_Test.pdf', '192120_Sample_050_Test.pdf', '192163_Sample_010_Test.pdf', '192163_Sample_020_Test.pdf', '192145_Sample_010_Test.pdf', '192145_Sample_020_Test.pdf', '192145_Sample_050_Test.pdf', '192051_Sample_010_Test.pdf', '192051_Sample_020_Test.pdf', '192051_Sample_050_Test.pdf']

# 不要用dict作为变量名,这是Python内置类型,会覆盖内置函数
file_group = {}

for filename in list_dir:
    # 提取第一个下划线前的内容作为分组键
    prefix = filename.split("_")[0]
    # 如果键不存在,先初始化一个空列表
    if prefix not in file_group:
        file_group[prefix] = []
    # 将当前文件名添加到对应分组的列表中
    file_group[prefix].append(filename)

print(file_group)

方法2:用collections.defaultdict简化代码

如果想让代码更简洁,可以用Python标准库的defaultdict,它会自动为不存在的键创建空列表:

from collections import defaultdict

list_dir = ['192586_Sample_010_Test.pdf', '192586_Sample_020_Test.pdf', '192586_Sample_050_Test.pdf', '192120_Sample_020_Test.pdf', '192120_Sample_050_Test.pdf', '192163_Sample_010_Test.pdf', '192163_Sample_020_Test.pdf', '192145_Sample_010_Test.pdf', '192145_Sample_020_Test.pdf', '192145_Sample_050_Test.pdf', '192051_Sample_010_Test.pdf', '192051_Sample_020_Test.pdf', '192051_Sample_050_Test.pdf']

file_group = defaultdict(list)
for filename in list_dir:
    prefix = filename.split("_")[0]
    file_group[prefix].append(filename)

# 可选:如果需要转换成普通字典
file_group = dict(file_group)
print(file_group)

这两种方法都会输出你期望的结果:

{'192586': ['192586_Sample_010_Test.pdf', '192586_Sample_020_Test.pdf', '192586_Sample_050_Test.pdf'], '192120': ['192120_Sample_020_Test.pdf', '192120_Sample_050_Test.pdf'], '192163': ['192163_Sample_010_Test.pdf', '192163_Sample_020_Test.pdf'], '192145': ['192145_Sample_010_Test.pdf', '192145_Sample_020_Test.pdf', '192145_Sample_050_Test.pdf'], '192051': ['192051_Sample_010_Test.pdf', '192051_Sample_020_Test.pdf', '192051_Sample_050_Test.pdf']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:19:09