Python如何对字典列表按键匹配值校验后筛选删除元素
字典列表筛选实现
完整可运行代码
# 原始数据 myd = [ { 'name': 'Abc', 'id': '101', 'status': 'Success', 'lastModifiedDate': '2022-02-14 12:25:32:013302' }, { 'name': 'Abc', 'id': '101', 'status': 'Failed', 'lastModifiedDate': '2022-02-21 12:25:32:013302' }, { 'name': 'def', 'id': '102', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302' }, { 'name': 'ghi', 'id': '103', 'status': 'Success', 'lastModifiedDate': '2022-02-14 12:25:32:013302' }, { 'name': 'ijk', 'id': '110', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302' }, { 'name': 'ijk', 'id': '110', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302' } ] # 1. 去除完全重复的条目 unique_list = [dict(t) for t in {tuple(d.items()) for d in myd}] # 2. 标记所有存在Success状态的id invalid_ids = set() for item in unique_list: if item['status'] == 'Success': invalid_ids.add(item['id']) # 3. 筛选最终结果:状态为Failed,且对应id没有Success记录 final_result = [ item for item in unique_list if item['status'] == 'Failed' and item['id'] not in invalid_ids ]
逻辑说明
- 去重部分直接复用了你已写的逻辑,利用集合元素唯一的特性自动剔除完全一致的字典项,无需额外判断
- 用
set存储存在成功记录的id,成员判断效率远高于列表,数据量大时性能优势明显 - 最终通过列表推导式一次性完成过滤,逻辑分层清晰,后续调整规则也方便
输出结果
运行代码后得到的final_result和期望输出完全匹配:
[ { 'name': 'def', 'id': '102', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302' }, { 'name': 'ijk', 'id': '110', 'status': 'Failed', 'lastModifiedDate': '2022-02-14 12:25:32:013302' } ]
内容的提问来源于stack exchange,提问作者sim
相关产品推荐
相关产品推荐

