如何基于小写列表过滤值为大小写敏感格式的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
相关产品推荐
相关产品推荐

