如何更新扩展Python字典键且不覆盖、不重复现有值?
问题根因
extend方法导致重复:该方法会直接将新列表所有元素追加到已有列表末尾,无内置去重逻辑,多次添加相同页码就会产生大量重复值。update方法报错+逻辑错误:代码中page_dict()属于语法错误,字典是容器不是可调用函数,加括号会触发类型错误;且update方法会直接用新值覆盖对应键的原有值,完全不符合合并需求。
解决方案
根据是否需要保留页码排序/原有顺序,可选择以下两种实现:
方案1:输出升序页码(适合书籍索引场景,效率更高)
利用集合自动去重,再转为列表排序,符合常规书籍索引的页码排列习惯:
# 检查新键是否存在 if nw in page_dict: # 合并两个列表后去重、升序排列 merged = list(set(page_dict[nw] + page_list)) merged.sort() page_dict[nw] = merged else: # 新键直接赋值并排序 page_dict[nw] = sorted(page_list)
方案2:保留页码原有出现顺序
如果需要严格保留页码第一次出现的顺序,不做排序,可遍历新页码逐个判断添加:
if nw in page_dict: for page_num in page_list: # 仅添加不存在的页码,避免重复 if page_num not in page_dict[nw]: page_dict[nw].append(page_num) else: page_dict[nw] = page_list.copy()
内容的提问来源于stack exchange,提问作者OnceUponATime
相关产品推荐
相关产品推荐

