如何移除Python列表中的重复字典及含None值的字典?
移除Python列表中的重复字典与含None值字典
问题说明
你有一个包含大量字典的Python列表,需要完成两个操作:
- 移除所有包含
name为None的字典 - 移除重复的字典,保留每组有效设备配对的唯一记录
批量数据示例:
[ {"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)
代码说明
- 过滤无效字典:通过
item.get("name") is not None筛选出name不为空的字典 - 去重逻辑:由于字典不可直接存入集合,将字典的键值对排序后转为元组(保证相同内容的字典生成相同元组),用集合
seen记录已出现的元组,避免重复添加
内容的提问来源于stack exchange,提问作者Aaru
相关产品推荐
相关产品推荐

