如何移除JSON中空引号元素?Python代码逻辑问题排查
问题根源:逻辑运算符用反了
你写的条件id is not None or id is not ""逻辑上永远为真——任何一个id值,要么不是None,要么不是空字符串(毕竟一个值不可能同时既是None又是空字符串),所以所有元素都会被判定为符合保留条件,自然删不掉目标元素。
正确的写法
要移除id为None或空字符串的元素,应该用**逻辑与(and)**来组合判断:
# 假设你的JSON解析后的数据存在data列表中 filtered_data = [item for item in data if item.get('id') is not None and item.get('id') != ""]
如果你的id不会出现0、False这类需要保留的“假值”,还可以用更简洁的写法:
filtered_data = [item for item in data if item.get('id')]
(注:这种简洁写法会把0、False等布尔假值也过滤掉,若id可能包含这些合法值,优先用第一种精确判断的写法)
为什么之前的代码无效?
举两个直观例子:
- 当
id是None时,id is not None为假,但id is not ""为真,or组合后整体为真,元素被保留; - 当
id是""时,id is not None为真,or组合后整体还是真,元素也被保留; - 只有当
id同时是None和空字符串时才会被过滤,但这种情况根本不可能发生。
内容的提问来源于stack exchange,提问作者justaguy
相关产品推荐
相关产品推荐

