如何按文件名末尾四位数字升序排列字典的元素列表
解决字典中文件名列表按末尾四位数字升序排序的问题
没问题,这事儿很容易搞定!核心思路就是从每个文件名里提取出末尾的四位数字,把它作为排序依据,然后对字典里每个键对应的列表做升序排列。
具体实现方案
我们可以用Python的sorted()函数配合自定义排序键来完成,代码简洁又高效:
# 基于原始字典 grouped_labels 生成排序后的新字典 sorted_grouped_labels = { key: sorted(files, key=lambda fname: int(fname.split('_')[-1].split('.')[0])) for key, files in grouped_labels.items() }
代码细节解释
fname.split('_')[-1]:把文件名按下划线分割,取最后一段内容——比如对v_SkateBoarding_g11_c03_0071.jpeg,这一步会得到0071.jpeg.split('.')[0]:把上面的结果按小数点分割,取第一段,得到纯数字字符串0071int(...):将数字字符串转为整数,确保排序是按数字大小来(虽然四位字符串的字典序和数字序结果一致,但转成整数的写法更严谨,也能兼容未来可能出现的非四位数字场景)
验证示例
拿你给出的示例列表测试:
example_files = ['v_SkateBoarding_g11_c03_0071.jpeg', 'v_SkateBoarding_g11_c03_0089.jpeg', 'v_SkateBoarding_g11_c03_0063.jpeg', 'v_SkateBoarding_g11_c03_0006.jpeg', 'v_SkateBoarding_g11_c03_0052.jpeg', 'v_SkateBoarding_g11_c03_0033.jpeg', 'v_SkateBoarding_g11_c03_0032.jpeg'] sorted_files = sorted(example_files, key=lambda fname: int(fname.split('_')[-1].split('.')[0])) print(sorted_files)
运行后会得到按数字升序排列的结果:
['v_SkateBoarding_g11_c03_0006.jpeg', 'v_SkateBoarding_g11_c03_0032.jpeg', 'v_SkateBoarding_g11_c03_0033.jpeg', 'v_SkateBoarding_g11_c03_0052.jpeg', 'v_SkateBoarding_g11_c03_0063.jpeg', 'v_SkateBoarding_g11_c03_0071.jpeg', 'v_SkateBoarding_g11_c03_0089.jpeg']
内容的提问来源于stack exchange,提问作者eric lardon
相关产品推荐
相关产品推荐

