Python循环中如何将多个字典正确追加到单个列表?
问题解决:生成包含所有图片路径的字典列表
需求是生成包含指定目录下三张图片路径的字典列表,预期格式如下:
[{'doc_id': 1, 'doc_path': 'E:\\Python_data\\image_data\\Image_1.jpeg'}, {'doc_id': 1, 'doc_path': 'E:\\Python_data\\image_data\\Image_2.jpeg'}, {'doc_id': 1, 'doc_path': 'E:\\Python_data\\image_data\\Image_3.jpeg'}]
用户原始代码如下:
import cv2 import os import glob img_dir = "E:\Python_data\image_data" data_path = os.path.join(img_dir,'*g') files = glob.glob(data_path) for i in files: dict1 = {"doc_id": 1,"doc_path": i} list1=[] list1.append(dict1.copy()) print(list1,'<--My list')
运行后仅保留最后一张图片的字典,原因是在循环内部每次都重新初始化空列表list1,导致每次循环都会丢弃之前的内容,只保留当前图片的字典条目。
修正后的代码
把列表初始化语句list1=[]移到循环外部,确保所有字典都追加到同一个列表中:
import cv2 import os import glob img_dir = "E:\Python_data\image_data" data_path = os.path.join(img_dir,'*g') files = glob.glob(data_path) # 初始化空列表在循环外 list1 = [] for i in files: dict1 = {"doc_id": 1,"doc_path": i} list1.append(dict1.copy()) print(list1,'<--My list')
运行结果
执行修正后的代码,将得到预期的包含所有三张图片路径的字典列表:
[{'doc_id': 1, 'doc_path': 'E:\\Python_data\\image_data\\Image_1.jpeg'}, {'doc_id': 1, 'doc_path': 'E:\\Python_data\\image_data\\Image_2.jpeg'}, {'doc_id': 1, 'doc_path': 'E:\\Python_data\\image_data\\Image_3.jpeg'}] <--My list
内容的提问来源于stack exchange,提问作者Chirag Patankar
相关产品推荐
相关产品推荐

