什么是从列表中保存的字典中删除空值的有效方法.
list1 = [{'l1k1': 'l1v1', 'l1k2': 'l1v2'}, {'l2k1': 'l2v1', 'l2k2': ''}]
list2 = []
for l in list1:
d = {}
for k, v in l.items():
if v.strip() is not None or v.strip() != '':
d[k] = v
list2.append(d)
print(list2)
Run Code Online (Sandbox Code Playgroud)
实际产量:
[{'l1k1': 'l1v1', 'l1k2': 'l1v2'}, {'l2k1': 'l2v1', 'l2k2': ''}]
Run Code Online (Sandbox Code Playgroud)
预期产出:
[{'l1k1': 'l1v1', 'l1k2': 'l1v2'}, {'l2k1': 'l2v1'}]
Run Code Online (Sandbox Code Playgroud)
试试这个:
list1 = [{'l1k1': 'l1v1', 'l1k2': 'l1v2'}, {'l2k1': 'l2v1', 'l2k2': ''}]
list2 = [{ k: v for k, v in d.items() if v and v.strip() } for d in list1]
Run Code Online (Sandbox Code Playgroud)
请注意,正确的检查是v and v.strip()确保字符串不是None并且不是所有空格.它按预期工作:
list2
=> [{'l1k1': 'l1v1', 'l1k2': 'l1v2'}, {'l2k1': 'l2v1'}]
Run Code Online (Sandbox Code Playgroud)
它是有效的,因为它使用列表推导和字典理解,这比执行显式循环更快.而且,它非常紧凑和惯用:)
试试这个 :
list2 = [{k:v for k,v in i.items() if v!= '' or v.strip() != ''} for i in list1]
Run Code Online (Sandbox Code Playgroud)
我们可以同时使用dict-comprehension和list-comprehension.我们循环每个元素(它是一个字典)list1,并且只取这些键值对,其中值或value.strip()字典中的相应键不是空字符串.
用None类型取消值的较短版本:
list2 = [{k:v for k,v in i.items() if v} for i in list1]
Run Code Online (Sandbox Code Playgroud)