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

如何移除Python列表中的重复字典及含None值的字典?

移除Python列表中的重复字典与含None值字典

问题说明

你有一个包含大量字典的Python列表,需要完成两个操作:

  1. 移除所有包含name为None的字典
  2. 移除重复的字典,保留每组有效设备配对的唯一记录

批量数据示例:

[
    {"name": "PAIR-05|PAIR-06", "device": "oob-01"},
    {"name": "PAIR-05|PAIR-06", "device": "oob-01"},
    {"name": "PAIR-01|PAIR-02", "device": "oob-03"},
    {"name": "PAIR-01|PAIR-02", "device": "oob-03"},
    {"name": None, "device": "oob-01"},
    {"name": None, "device": "oob-01"},
    {"name": None, "device": "oob-01"},
    {"name": None, "device": "oob-01"},
]

期望结果:

[
    {"name": "PAIR-05|PAIR-06", "device": "oob-01"},
    {"name": "PAIR-01|PAIR-02", "device": "oob-03"},
]

原代码问题分析

你尝试的代码无法正常运行,主要问题包括:

  • 错误对列表调用items()方法:bulkpairdata是列表,没有items()属性
  • 每次循环重新初始化空列表t:无法持续记录已出现的name值
  • 错误使用remove()方法:bulkpairdata.remove(bulkpairdata.get("name"))逻辑混乱,remove()是移除列表中的元素,不能直接按name值删除字典
  • 遍历逻辑错误:没有正确遍历列表中的每个字典元素

解决方案代码

以下是可以实现需求的代码:

bulk_data = [
    {"name": "PAIR-05|PAIR-06", "device": "oob-01"},
    {"name": "PAIR-05|PAIR-06", "device": "oob-01"},
    {"name": "PAIR-01|PAIR-02", "device": "oob-03"},
    {"name": "PAIR-01|PAIR-02", "device": "oob-03"},
    {"name": None, "device": "oob-01"},
    {"name": None, "device": "oob-01"},
    {"name": None, "device": "oob-01"},
    {"name": None, "device": "oob-01"},
]

result = []
seen = set()

for item in bulk_data:
    # 过滤掉name为None的字典
    if item.get("name") is not None:
        # 将字典转为可哈希的排序元组,确保相同字典的键值对顺序不影响判断
        unique_key = tuple(sorted(item.items()))
        if unique_key not in seen:
            seen.add(unique_key)
            result.append(item)

print(result)

代码说明

  1. 过滤无效字典:通过item.get("name") is not None筛选出name不为空的字典
  2. 去重逻辑:由于字典不可直接存入集合,将字典的键值对排序后转为元组(保证相同内容的字典生成相同元组),用集合seen记录已出现的元组,避免重复添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:43:11