如何从Python字典列表中移除指定的键集合?
正确实现方案
方法一:嵌套字典推导式的列表推导
这是最直接的写法,对原列表里的每个字典,生成一个只包含不在移除列表l中的键值对的新字典:
ld = [{'a':1,'b':2,'c':9},{'a':1,'b':2,'c':10}] l = ['a','c'] result = [{k: v for k, v in d.items() if k not in l} for d in ld] print(result) # 输出: [{'b':2},{'b':2}]
方法二:遍历删除指定键(修改原字典)
如果允许修改原列表中的字典,可以遍历每个字典,逐个移除指定的键:
ld = [{'a':1,'b':2,'c':9},{'a':1,'b':2,'c':10}] l = ['a','c'] for d in ld: for k in l: d.pop(k, None) # 用pop并指定默认值,避免键不存在时报错 print(ld) # 输出: [{'b':2},{'b':2}]
原写法问题分析
你写的列表推导式:
result = [d for d in ld for k in d if k in l]
逻辑错误在于:遍历每个字典d后,又遍历d的每个键k,只要k在移除列表l中,就把**整个原字典d**加入结果列表。原每个字典里有2个符合条件的键(a和c),所以最终会生成重复的原字典,完全不符合预期。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

