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

Python中如何基于4个键中的2个获取字典的唯一列表

更符合Pythonic规范的去重实现

你的现有逻辑可以正常跑通,优化方向主要是减少手动维护两个列表的冗余代码、提升去重环节的查找效率,可以借助Python字典键唯一的特性实现更简洁的写法:

基础实现(适配Python3.7+)

Python3.7及以上版本中,字典会自动保留元素的插入顺序,可完全替代手动维护去重标识列表的逻辑:

unique_releases = list({
    item["release_id"]: {
        "release_id": item["release_id"],
        "release_name": item["release_name"],
        "release_date": item["release_date"]
    }
    for item in release_list
}.values())

实现说明:

  • 以每条记录的release_id作为字典键,重复的同ID记录会自动覆盖,完成自动去重
  • 最终取字典的values生成列表,保留的顺序和原列表中同ID记录第一次出现的顺序完全一致,输出结构和你预期的效果没有差异
  • 相比原有实现,字典键的存在性判断是O(1)时间复杂度的哈希查找,比原来用列表判断release_id是否存在的O(n)线性查找效率更高,不会随列表长度增加出现明显性能损耗

顺带一提,你现有代码里的字典取值存在字符串引号不闭合的笔误(比如i['release_id]没有闭合引号),实际运行时会触发语法错误,写代码时注意补全即可。

灵活适配字段变动

如果后续需要保留的字段变多,手动逐个罗列保留字段会比较繁琐,可以在生成记录时直接剔除不需要的issue_id字段,无需每次调整代码:

unique_releases = list({
    item["release_id"]: {k: v for k, v in item.items() if k != "issue_id"}
    for item in release_list
}.values())

这种写法会自动保留同release_id下除issue_id外的所有字段,适配后续字段增减的场景。

低版本Python兼容方案

如果使用的是3.7以下的Python版本,无法依赖普通字典的插入顺序,可以使用collections.OrderedDict实现完全一致的效果:

from collections import OrderedDict

unique_releases = list(OrderedDict({
    item["release_id"]: {k: v for k, v in item.items() if k != "issue_id"}
    for item in release_list
}.values()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 09:27:00