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

使用Python列表推导式处理字典列表后出现重复项问题

解决列表推导式重复项问题

你的列表推导式使用了双重循环,遍历l1的每个元素时又遍历l2的所有元素,导致每个l1元素会生成len(l2)个条目——其中只有一次是匹配ticket_type后修改的结果,其余都是原元素的副本,最终出现重复。

最优解决方案

先将l2转换为以ticket_type为键的字典,这样可以快速查找对应预订量,再通过单次遍历l1生成结果,既避免重复又提升效率:

# 把l2转成字典,便于快速查找预订量
booked_dict = {item["ticket_type"]: item["ticket_booked"] for item in l2}

# 列表推导式生成最终结果
result = [
    {**x, "ticket_count": x["ticket_count"] - booked_dict[x["ticket_type"]]}
    for x in l1
]

运行后输出的result与期望一致:

[{'ticket_type': 'A1', 'ticket_count': 28, 'ticket_price': 1000.0}, 
 {'ticket_type': 'A2', 'ticket_count': 68, 'ticket_price': 500.0}, 
 {'ticket_type': 'A3', 'ticket_count': 3, 'ticket_price': 1200.0}]

备选方案(不提前转字典)

如果不想提前生成字典,也可以用生成器表达式匹配对应ticket_type的预订量,但这种方式时间复杂度更高(每个l1元素都要遍历一次l2):

result = [
    {**x, "ticket_count": x["ticket_count"] - next(y["ticket_booked"] for y in l2 if y["ticket_type"] == x["ticket_type"])}
    for x in l1
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:47:37