You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何根据字典内嵌套列表内容正确过滤字典列表

错误原因

你编写的嵌套filter语句没有生效,是因为内层filter返回的是迭代器对象,在Python中哪怕是空迭代器的布尔判定结果也为True,因此外层filter会保留所有字典元素,最终输出原列表。

实现方案

方案1:列表推导 + any()(最推荐)

any()函数只要检测到迭代器中存在任意一个True值就会立即返回True,刚好匹配你“至少包含一个可接受水果”的过滤规则,且匹配到第一个符合条件的元素就会终止遍历,性能更优:

list_of_dicts = [
        {'id': 1, 'fruits':['apple']},
        {'id': 2, 'fruits':['orange']},
        {'id': 3, 'fruits':['banana', 'apple']},
        {'id': 4, 'fruits':['banana', 'apple', 'orange']}
        ]
acceptable_fruits = ['apple', 'banana']

filtered_list = [d for d in list_of_dicts if any(fruit in acceptable_fruits for fruit in d['fruits'])]
print(filtered_list)

输出结果和你给出的预期结果完全一致。

方案2:基于filter的实现

如果偏好使用filter写法,只需将内层判断替换为any()逻辑即可:

filtered_list = filter(lambda d: any(fruit in acceptable_fruits for fruit in d['fruits']), list_of_dicts)
print(list(filtered_list))

性能优化建议

如果可接受水果列表较长,可以先将其转换为集合,将in操作的时间复杂度从O(n)降低到O(1):

acceptable_set = set(acceptable_fruits)
filtered_list = [d for d in list_of_dicts if any(fruit in acceptable_set for fruit in d['fruits'])]

内容的提问来源于stack exchange,提问作者ismaupin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:36:03