Python列表值在附加新值时更新,旧值丢失



我正在运行一个脚本,该脚本将数据提取到字典中,它用旧参数创建新参数,然后必须将新参数附加到列表中。

循环进行得很好,每次我打印参数时,它都会正确地更新值,并创建一个新值、新url,一切都很好。

当我将参数附加到image_data_list时,问题就出现了。它不会将新字典添加到列表中,但会将列表中的每个值转换为新字典,因此当我需要每次迭代中得到的不同字典列表时,我会得到200个相等字典的列表。

image_data_list = []
status = True
index = 1
sd.click_image()
while status:
try:
all_urls = sd.extract_images()
parameters = sd.get_parameters(parameters_)
for url in all_urls:
parameters["url"] = url
parameters["index"] = index
print(parameters)
image_data_list.append(parameters)
print(image_data_list)
index += 1
except TimeoutException:
status = False
print("Ending Execution due to Timeout Exception")
break

我如何避免这种类型的结果:

[{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url.jpg', 'index': 4},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url.jpg', 'index': 4},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url.jpg', 'index': 4},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url.jpg', 'index': 4},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url.jpg', 'index': 4},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url.jpg', 'index': 4}] 

然后得到这样的东西:

[{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' blue lips', 'url': 'image_url_1.jpg', 'index': 1},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' brown eyes', 'url': 'image_url_2.jpg', 'index': 2},
{'age': 'adult', 'gender': 'female', 'ethnicity': 'latino', 'title': ' caramel', 'url': 'image_url_3.jpg', 'index': 3}]

最终的结果必须是每次迭代都有不同值的字典列表,每个新字典都会被附加,但旧字典不应该改变

u可以尝试一下,看看它是否有效

import copy
image_data_list = []
status = True
index = 1
sd.click_image()
while status:
try:
all_urls = sd.extract_images()
parameters = sd.get_parameters(parameters_)
for url in all_urls:
copyed_parameters = copy.deepcopy(parameters)
copyed_parameters["url"] = url
copyed_parameters["index"] = index
image_data_list.append(copyed_parameters)
index += 1
except TimeoutException:
status = False
print("Ending Execution due to Timeout Exception")
break

最新更新