我试图根据具有空值的键数来过滤字典列表(对于空值,我想考虑空字符串''和空列表[])。
例如
list_products=[{'index':1, 'type':'house', 'price': '', 'bar': []},{'index':1, 'type':'house', 'price': 'expensive', 'bar': ['yes','big']}]
我需要删除列表的第一个字典(值的数量为2或更少)。实际的字典有更多的键,我更喜欢一个解决方案,我不需要在if语句中指定键来检查它的值......
有可能有这样的东西......
list_products=[d for d in list_products if len(d.values())<2]
它不起作用因为python没有看到空列表空...任何建议?
提前致谢
答案 0 :(得分:5)
你想要像
这样的东西[d for d in list_products if sum(bool(v) for v in d.values()) > 2]
解释:你可以sum
布尔值:True
强制一个。
答案 1 :(得分:0)
result = []
treshold = 2
for item in list_products:
non_empty = 0
for key in item:
if item[key] not in ('', []):
non_empty += 1
if non_empty > treshold:
result.append(item)
在这里,您只需在result
列表中设置阈值并获得所需内容。