You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免重复添加字典键值对?Python代码逻辑失效求助

问题分析与修复方案

原代码的核心问题

  • 判断逻辑错误:my_list是字典列表,直接检查wiz.first_name或wiz.last_name是否在列表中,本质是判断字符串是否等于列表里的字典元素,永远返回False,会导致重复添加。
  • 硬编码内容:不管当前wiz对象的姓名是什么,都固定添加{"first_name": "Harry", "last_name": "Potter"},完全不符合“添加对应字典”的需求。
  • 去重逻辑偏差:需求是判断姓名组合是否存在,原代码单独判断名和姓,逻辑不成立(比如不同的人可能同名或同姓,但组合不同)。

基础修复版本

直接检查目标格式的字典是否已存在于列表中,逻辑简单直观:

wizards = [Wiz_1, Wiz_2, Wiz_3, Wiz_1]
my_list = []

for wiz in wizards:
    # 生成当前巫师对应的字典
    current_wiz_dict = {"first_name": wiz.first_name, "last_name": wiz.last_name}
    # 检查该字典是否未在列表中,不存在则添加
    if current_wiz_dict not in my_list:
        my_list.append(current_wiz_dict)

高效优化版本

如果wizards列表数据量大,遍历列表检查存在性效率较低,可借助集合存储已出现的姓名组合(元组可哈希,适合存入集合),将查询时间从O(n)降到O(1):

wizards = [Wiz_1, Wiz_2, Wiz_3, Wiz_1]
my_list = []
seen_name_pairs = set()  # 记录已处理过的姓名组合

for wiz in wizards:
    first_name = wiz.first_name
    last_name = wiz.last_name
    name_pair = (first_name, last_name)
    
    if name_pair not in seen_name_pairs:
        seen_name_pairs.add(name_pair)
        my_list.append({"first_name": first_name, "last_name": last_name})

内容的提问来源于stack exchange,提问作者Coco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:55:19