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

如何使用正则表达式获取Python字典各键对应列表中b后最大数字的文件名

解决字典中文件名“b”后四位数字最大值的问题

你遇到的核心问题是正则匹配范围不对,而且循环遍历字典的方式有误,我来帮你修正并给出可行的解决方案。

首先,你的原始代码有两个明显问题:

  • 遍历字典时应该用my_dict.items(),否则直接遍历my_dict只会拿到键,无法获取对应的文件列表;
  • 用re.findall('\d+', string)会匹配字符串中所有数字,包括文件名开头的编号,这不是你要的目标。

针对需求,我们需要精准匹配字母"b"之后的四位数字,然后基于这个数字的大小找到对应的文件名。以下是完整的解决方案:

完整代码实现

import re

# 你的原始字典
my_dict = { 
    "['000A']": ['1653418_a0001b001.jpg', '2132018_a0002b002.jpg', '4789562_a0001b003.jpg', 
                 '8469844_a0009b004.jpg', '4815099_a0004b000.jpg', '9085654_a0001b001.jpg', 
                 '9742212_a0007b002.jpg', '1325874_a0002b009.jpg', '1474856_a0090f014.jpg'], 
    "['000B']": ['1653418_a0001b001.jpg', '2132018_a0002b002.jpg', '4789562_a0001b003.jpg', 
                 '8469844_a0009b004.jpg', '4815099_a0004b000.jpg', '9085654_a0001b001.jpg', 
                 '9742212_a0007b002.jpg', '1325874_a0002b009.jpg', '123456_a0090f020.jpg'] 
}

result_dict = {}
for key, file_list in my_dict.items():
    # 用max函数结合自定义key,找到b后数字最大的文件
    target_file = max(
        file_list,
        key=lambda filename: int(re.search(r'b(\d{4})', filename).group(1))
    )
    result_dict[key] = target_file

print(result_dict)

代码说明

  1. 正则匹配逻辑:r'b(\d{4})'是关键,它会精准匹配字符串中b后面紧跟的4位数字,括号()用来捕获这个数字组,方便后续提取。
  2. 遍历字典:my_dict.items()能同时获取每个键和对应的文件列表,这是遍历字典键值对的正确方式。
  3. max函数的key参数:通过lambda表达式,把每个文件名转换成对应的b后四位数字的整数,max会基于这个整数的大小找到对应的文件名。

容错优化(可选)

如果你的文件列表中存在不符合b+四位数字格式的文件,可以添加判断避免报错:

target_file = max(
    file_list,
    key=lambda filename: int(re.search(r'b(\d{4})', filename).group(1)) if re.search(r'b(\d{4})', filename) else 0
)

这样即使遇到不符合格式的文件,也会默认用0作为比较值,不会抛出异常。

运行上述代码后,就能得到你预期的结果:

{"['000A']": '1474856_a0090f014.jpg', "['000B']": '123456_a0090f020.jpg'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:02:42