如何过滤嵌套字典?Python字典过滤需求咨询
嵌套字典过滤实现方案
先明确你的原始数据结构:
keyList = ['0','1','2'] valueList = [{'Name': 'Nick', 'Age': 39, 'Country': 'UK'}, {'Name': 'Steve', 'Age': 19, 'Country': 'Spain'}, {'Name': 'Dave', 'Age': 23, 'Country': 'UK'}] d = {} for i in range(len(keyList)): d[keyList[i]] = valueList[i]
生成的字典:
{'0': {'Name': 'Nick', 'Age': 39, 'Country': 'UK'}, '1': {'Name': 'Steve', 'Age': 19, 'Country': 'Spain'}, '2': {'Name': 'Dave', 'Age': 23, 'Country': 'UK'}}
需求1:单个值过滤(忽略大小写)
要移除指定字段值匹配目标值的键值对,只需在字典推导式里对字段值和目标值统一做大小写转换后比较即可。如果字段是整数类型,直接比较即可,用str()包裹是为了兼容字符串和整数的统一处理。
示例:移除Name为Nick的条目:
target_field = "Name" target_value = "Nick" filtered_d = { k: v for k, v in d.items() if str(v[target_field]).casefold() != target_value.casefold() }
运行结果:
{'1': {'Name': 'Steve', 'Age': 19, 'Country': 'Spain'}, '2': {'Name': 'Dave', 'Age': 23, 'Country': 'UK'}}
需求2:列表值过滤(忽略大小写)
要移除指定字段值匹配列表中任意元素的条目,先把过滤列表统一转换为casefold格式的集合(集合查询效率更高),再判断字段值转换后的结果是否不在这个集合里。
示例:移除Country在["uK", "Italy", "New Zealand"]中的条目:
target_field = "Country" filter_list = ["uK", "Italy", "New Zealand"] filter_set = {item.casefold() for item in filter_list} filtered_d = { k: v for k, v in d.items() if str(v[target_field]).casefold() not in filter_set }
运行结果:
{'1': {'Name': 'Steve', 'Age': 19, 'Country': 'Spain'}}
原代码问题说明
你原代码使用"nick".casefold() not in v["Name"],这里的in是检查子串包含,而非精确匹配。比如如果Name是Nickson,这个条件也会保留该条目,但你的需求是精确匹配目标值,因此需要用相等比较(需求1)或集合成员判断(需求2)。
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

