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

Python中基于不同字段求字典列表差值的优雅实现方法

当然可以实现!而且确实有比多层循环更优雅的写法,我给你几种实用方案参考:

方案一:列表推导式 + 集合(最推荐,高效又易读)

先把second列表里的user_id提取成集合(集合的成员查找是O(1),比列表快得多,尤其是数据量大的时候),再用列表推导式过滤first:

first = [{'id': '1'}, {'id': '2'}, {'id': '3'}]
second = [{'user_id': '1'}, {'user_id': '2'}]

# 提取second中的user_id到集合
second_user_ids = {item['user_id'] for item in second}
# 过滤出first中id不在集合里的项
result = [item for item in first if item['id'] not in second_user_ids]

print(result)  # 输出: [{'id': '3'}]

方案二:filter + lambda(满足你想要的lambda写法)

如果偏爱用高阶函数,也可以结合filter和lambda来实现,逻辑和上面一致:

second_user_ids = {item['user_id'] for item in second}
result = list(filter(lambda x: x['id'] not in second_user_ids, first))

为什么不推荐多层循环?

多层循环的时间复杂度是O(n*m)(n是first的长度,m是second的长度),而用集合的方法是O(n+m),数据量越大,效率差距越明显。而且上面两种写法的可读性也比嵌套循环好太多。

小提示:如果你的字典可能存在缺少id或user_id的情况,可以用item.get('id')代替item['id'],避免抛出KeyError。

内容的提问来源于stack exchange,提问作者Mr.D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:36