使用dict.fromkeys创建字典时出现键值交叉污染问题求助
问题根源与解决方法
为什么会出现键值交叉污染?
你用dict.fromkeys创建新字典时踩了Python的常见坑:dict.fromkeys(dct.keys(), [])里的空列表[]是同一个内存对象,所有键都指向这个列表。不管你给哪个键的列表追加元素,都会修改这个共享的列表,最终所有键对应的列表内容完全一致。
正确的处理方案
1. 替换字典初始化方式
别用dict.fromkeys,改用以下两种方式创建每个键对应独立空列表的新字典:
方法一:循环逐个初始化
hdct = {} for key in dct: hdct[key] = []
方法二:字典推导式(更简洁)
hdct = {key: [] for key in dct}
2. 完整的URL处理代码
替换初始化方式后,再执行URL处理逻辑就能得到正确结果:
dct = {'31212': ['websitea', 'websiteb'], '17759': ['websitec']} # 正确初始化新字典,每个键对应独立空列表 hdct = {key: [] for key in dct} for key, urls in dct.items(): for url in urls: # 检查URL是否已包含http/https协议头 if not url.startswith(('http://', 'https://')): processed_url = f'http://{url}' else: processed_url = url hdct[key].append(processed_url) print(hdct) # 输出结果: # {'31212': ['http://websitea', 'http://websiteb'], '17759': ['http://websitec']}
内容的提问来源于stack exchange,提问作者patricknd90
相关产品推荐
相关产品推荐

