Python 如何为字典列表各字典正确添加os.listdir对应的image_name键值
原代码错误原因
你目前的嵌套循环逻辑会直接导致所有字典的image_name被反复覆盖:
- 外层每拿到一个水果字典,内层就会遍历完
os.listdir()返回的所有文件名,把每个文件名挨个赋值给这个字典的image_name字段 - 每次赋值都会覆盖上一次的值,等内层循环走完,当前字典的
image_name就停在列表最后一个元素010.txt - 所有字典都重复这个流程,最终所有字典的
image_name都统一成了最后一个文件名。
正确实现代码
不需要嵌套循环,只要把两个列表按位置一一配对赋值即可:
import os # 提前获取目录下的文件列表,避免循环内反复调用导致的顺序波动 image_file_list = os.listdir(dir_image) # 强制按文件名的数字顺序排序,保证顺序严格对应001.txt ~ 010.txt,避免文件系统返回乱序 image_file_list = sorted(image_file_list) # 用zip将两个等长序列按位置配对,直接给字典赋值 for fruit_item, img_name in zip(list_of_dictionary, image_file_list): fruit_item["image_name"] = img_name
注意事项
- 保证
list_of_dictionary的长度和image_file_list的长度完全一致,zip()会在较短的序列遍历完成时自动终止循环,长度不匹配会导致部分字典无法加上image_name字段 - 如果目录里存在无关的非图片文件,需要提前用列表推导式过滤掉不需要的文件,避免把非图片文件的名称赋值到字段里。
内容的提问来源于stack exchange,提问作者Achmad Setiawan
相关产品推荐
相关产品推荐

