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

Python字典列表按Name键去重 保留对应price字段最大值

问题场景

手里有个存储字典对象的列表,原始数据如下:

te = [
  {
    "Name": "Bala",
    "price": 1
  },
  {
    "Name": "Bala",
    "price": 2
  },
  {
    "Name": "Bala",
    "price": 6
  },
  {
    "Name": "Bala",
    "price": 4
  },
  {
      "Name": "Bala1",
      "price": "None"
  }     
]

需求是按Name字段对列表内的字典去重,相同Name的条目保留price字段值最大的那一条。

之前尝试用字典推导式实现:

unique = { each['Name'] : each for each in te }.values()

运行后得到的结果里,Name为'Bala'的条目price值为4,也就是列表中最后一个Name为Bala的条目,和预期结果不符。预期Bala对应的price值应为6,预期结果如下:

[{'Name': 'Bala', 'price': 6 }, {'Name': 'Bala1', 'price': 'None' }]
问题原因

普通字典推导式构建字典时,遇到重复的Key会直接用后遍历到的值覆盖之前存储的内容,整个过程没有做price字段的大小比较,最后留存的自然是列表里最后一个出现的同名条目,不可能保留price最大的条目。

实现方案

单次遍历列表做判断即可,只需要遍历一轮列表就能得到结果,逻辑直观、执行效率高:

name_map = {}
for item in te:
    current_name = item["Name"]
    # 名字未存入结果,或当前条目price比已存的同名字段price大,就更新存储内容
    if current_name not in name_map or item["price"] > name_map[current_name]["price"]:
        name_map[current_name] = item

# 取出字典所有值转成列表,就是最终需要的去重结果
unique = list(name_map.values())

运行上述代码即可得到符合预期的结果。

注意事项

示例数据中Bala1的price是字符串类型的"None",如果后续数据中存在非数值类型的price值,建议提前做类型校验或转换,避免大小比较时触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.20 16:15:51