如果至少x键具有空值,则过滤字典列表

时间:2013-12-10 23:24:48

标签: python

我试图根据具有空值的键数来过滤字典列表(对于空值,我想考虑空字符串''和空列表[])。

例如

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没有看到空列表空...任何建议?

提前致谢

2 个答案:

答案 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列表中设置阈值并获得所需内容。