Python循环外定义字典为何导致列表元素重复?
问题解析:循环外定义字典导致列表元素重复的原因
核心原因:可变对象的引用特性
Python中的字典是可变对象,当你在循环外部定义events_dict = dict()时,整个循环过程中你操作的始终是同一个字典实例:
- 每次循环修改
events_dict的键值对,只是改变这个对象内部的存储数据,并没有创建新的字典。 - 执行
events_list.append(events_dict)时,列表添加的不是字典的副本,而是这个字典对象的引用(相当于指向该字典的“地址”)。
循环结束后,这个唯一的字典实例被最后一次循环的数据覆盖,所以遍历列表时,所有元素显示的都是最后一次修改后的内容——因为它们本质上都是指向同一个字典的引用。
解决思路的原理
把字典定义放到循环内部(for event in events: events_dict = dict()),每次循环都会创建一个全新的字典实例。此时添加到列表的是不同字典对象的引用,每个引用指向的都是独立的、存储着对应循环数据的字典,自然不会出现重复问题。
修改后的代码示例
import requests from bs4 import BeautifulSoup url = 'https://www.python.org/events/python-events/' req = requests.get(url) soup = BeautifulSoup(req.text, 'html.parser') events = soup.find('ul', {'class': 'list-recent-events'}).findAll('li') events_list = [] for event in events: # 每次循环创建新的字典实例 events_dict = dict() events_dict['name'] = event.find('h3').find("a").text events_dict['location'] = event.find('span', {'class': 'event-location'}).text events_dict['time'] = event.find('time').text events_list.append(events_dict) for items in events_list: print(items)
内容的提问来源于stack exchange,提问作者ZeinabBanayazdi
相关产品推荐
相关产品推荐

