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

Python:移除字典中首个元素不同但其余元素重复的嵌套列表

解决Python字典中嵌套列表的特定去重需求

嘿,你的这个解法真的相当巧妙!刚好精准命中了「移除嵌套列表中首个元素不同但其余元素重复项」的需求,我来帮你拆解下这段代码的逻辑,再补充点实用细节:

你的核心代码解析

你写的这段字典推导式完美解决了问题:

nduplicates = {k:[list(y) for y in {tuple(x[1:]) for x in v}] for k,v in results.items()}

拆解来看每一步的作用:

  • 最内层的{tuple(x[1:]) for x in v}:因为列表是不可哈希类型,没法直接放进集合去重,所以把每个嵌套列表从第二个元素开始的部分转成元组,利用集合的自动去重特性,精准过滤掉「后几位元素重复」的项
  • 接着[list(y) for y in ...]:把去重后的元组转回列表,保持原数据的格式一致性
  • 最外层的字典推导式:遍历原字典的每一组键值对,把处理后的嵌套列表重新映射到对应的键上

针对你的示例数据验证

拿你给出的results示例测试:

results = {
    'example': [
        ['london','5.123', '-3.123'],
        ['bham','5.123', '-3.123'],
        ['manc','51.23', '-3.453']
    ]
}

运行代码后,nduplicates['example']会变成包含两个元素的列表——后两位为'5.123', '-3.123'的重复项被成功移除。不过要注意:集合是无序的,最终保留的是london还是bham开头的项是随机的,如果需要保留原始列表中首次出现的项,可以用下面的补充方案:

补充:保留首次出现的去重方案

如果需要确保留下每个重复组里第一个出现的嵌套列表(比如想保留['london','5.123', '-3.123']而非bham开头的),可以改用字典记录已出现的项,可读性也更强:

nduplicates = {}
for k, v in results.items():
    seen = {}
    unique_list = []
    for item in v:
        # 用后几位转成的元组作为去重标识
        key = tuple(item[1:])
        if key not in seen:
            seen[key] = True
            unique_list.append(item)
    nduplicates[k] = unique_list

这个版本会严格按照原始列表的顺序,保留每个重复组合的第一个出现项。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:45