如何有效地从列表中移除字典内的空值?

2024-10-01 04:57:29 发布

您现在位置:Python中文网/ 问答频道 /正文

从保存在列表中的字典中删除空值的有效方法是什么。在

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)

实际产量:

^{pr2}$

预期产量:

[{'l1k1': 'l1v1', 'l1k2': 'l1v2'}, {'l2k1': 'l2v1'}]

Tags: in列表for字典strip空值产量list2
3条回答

试试这个:

list2 = [{k:v for k,v in i.items() if v!= '' or v.strip() != ''} for i in list1]

我们可以同时使用听写理解和列表理解。我们对list1的每个元素(它是一个字典)进行循环,只取字典中对应键的值或value.strip()不是空字符串的那些键值对。在

用于取消None类型的值的简短版本还包括:

^{pr2}$

这里有一个简单的替代方法,不使用列表理解,这可能会让您更容易理解:

for d in list1:
  for k in d.keys():
      if d[k] != '':
          list2.append({k:d[k]})

试试这个:

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]

注意,这里要做的正确的检查是v and v.strip(),它确保字符串不是None,也不是所有的空格。它按预期工作:

^{pr2}$

它是高效的,因为它使用列表理解和字典理解,这比显式循环更快。而且,它非常简洁和惯用:)

相关问题 更多 >