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

如何根据字典列表正确过滤字典:排除重复name键

字典按键过滤:排除存在于列表字典name字段中的键

问题描述

给定一个字典dict1和一个包含多个字典的列表lst1,需要过滤dict1,移除所有键存在于lst1中任意字典的name字段值里的键值对。

示例输入

dict1 = {'code': 'varchar(25)', 'cnt': 'int', 'id': 'int'}
lst1 = [{'name': 'client', 'datatype': 'varchar(100)'}, {'name': 'id', 'datatype': 'int'}, {'name': 'status', 'datatype': 'varchar(10)'}]

预期输出

dict2 = {'code': 'varchar(25)', 'cnt': 'int'}

解决方案

可以分两步高效实现:

  1. 提取lst1中所有字典的name值,存入集合(集合的成员查询效率远高于列表)
  2. 遍历原字典的键值对,筛选出键不在排除集合中的项,构建新字典

代码实现:

# 获取所有需要排除的键
exclude_keys = {item['name'] for item in lst1}
# 过滤字典生成新结果
dict2 = {key: value for key, value in dict1.items() if key not in exclude_keys}

print(dict2)
# 输出: {'code': 'varchar(25)', 'cnt': 'int'}

代码说明

  • 集合推导式{item['name'] for item in lst1}能快速收集所有要排除的键,集合的in操作时间复杂度为O(1),数据量越大,比用列表查询的优势越明显。
  • 字典推导式{key: value ...}简洁地遍历原字典,只保留符合条件的键值对,代码可读性和执行效率都很高。

如果需要兼容Python 2.x,可改用生成器表达式实现:

exclude_keys = set(item['name'] for item in lst1)
dict2 = dict((key, value) for key, value in dict1.items() if key not in exclude_keys)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:55:17