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

如何基于小写列表过滤值为大小写敏感格式的Python字典

Python基于大小写不敏感规则按值过滤字典的实现

要实现这个需求,核心思路是先把过滤条件预处理为可快速查询的结构,再遍历原字典做匹配即可,具体实现如下:

完整可运行代码

# 示例字典
d = {'1a': ['DW_TEST (DEV)', 'public', 'Labs'],
     '1b': ['DW_TEST (DEV)', 'public', 'Test'],
     '1c': ['DW_TEST (PROD)', 'public', 'Labs'],
     '1d': ['DW_TEST (PROD)', 'public', 'Test'],
     '2a': ['DW_PROD (PROD)', 'public', 'Medications'],
     '2b': ['DW_PROD (DEV)', 'public', 'Med_Test']}

# 小写过滤条件列表
l = [['dw_test (dev)', 'public', 'labs'],
     ['dw_test (prod)', 'public', 'labs'],
     ['dw_prod (prod)', 'public', 'medications']]

# 预处理过滤条件为元组集合(列表不可哈希,无法存入集合,转元组解决)
filter_condition = set(tuple(item) for item in l)

# 字典推导式过滤:将原字典值转小写后组装为元组,判断是否在过滤条件集合中
filtered_dict = {
    key: value 
    for key, value in d.items() 
    if tuple(s.lower() for s in value) in filter_condition
}

# 输出结果验证
print(filtered_dict)

输出结果

运行上述代码后得到的结果和预期完全一致:

{'1a': ['DW_TEST (DEV)', 'public', 'Labs'], '1c': ['DW_TEST (PROD)', 'public', 'Labs'], '2a': ['DW_PROD (PROD)', 'public', 'Medications']}

逻辑说明

  • 预处理过滤条件为集合的原因是集合的成员查询时间复杂度为O(1),相比每次匹配都遍历过滤列表的O(n)复杂度,数据量越大性能优势越明显
  • 转换为元组是因为Python中列表属于不可哈希类型,无法作为集合的元素,而长度一致、元素顺序和值一致的元组会被判定为相等,正好匹配比对需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:05