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

Python中对比两列表并更新属性,有无非循环实现方式(类C# Linq)

解决方案

虽然Python没有C# Linq那样的原生语法糖,但可以通过字典映射+列表推导式实现类似的简洁写法,不用显式编写for循环结构(底层仍会有循环,但写法更接近Linq的声明式风格),同时还能提升匹配效率:

步骤1:将list2转为name为键的字典

先把list2转换成以name为键、value为值的字典,这样后续匹配查找的时间复杂度是O(1),远高于双重列表遍历的O(n²):

value_map = {item["name"]: item["value"] for item in list2}

方式一:生成新的更新后列表(类似Linq的Select)

这种方式不修改原list1,返回一个全新的列表,符合函数式编程风格:

updated_list1 = [
    {**item, "value": value_map.get(item["name"], item["value"])}
    for item in list1
]

这里用字典解包**item复制原字典的所有键值对,再覆盖value字段;get方法保证如果name在list2中不存在,会保留原list1的value值。

方式二:原地更新原list1的元素

如果需要直接修改原list1的对象,可以用map配合lambda实现(无需显式for循环):

# 执行更新操作,map返回的迭代器需要触发执行
list(map(lambda x: x.update({"value": value_map.get(x["name"], x["value"])}), list1))

不过这种方式的可读性稍差,一般更推荐第一种生成新列表的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:35:36