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

如何高效移除含字典与整数的嵌套列表中的重复项?

嵌套列表去重优化方案

问题场景

你有一个嵌套列表,每个子列表包含1个字典和1个整数,其中存在重复项(依据子列表中的字典判断重复)。当前通过循环迭代新列表实现去重,希望用更简洁的写法或更高效的方式优化。

原代码及期望输出:

TRIAL=[[{'http': '46.101.160.223:80', 'https': '46.101.160.223:80'}, 0],
 [{'http': '66.70.178.214:9300', 'https': '66.70.178.214:9300'}, 0],
 [{'http': '130.61.100.135:80', 'https': '130.61.100.135:80'}, 0],
 [{'http': '157.245.27.9:3128', 'https': '157.245.27.9:3128'}, 0],
 [{'http': '185.246.84.7:8080', 'https': '185.246.84.7:8080'}, 0],
 [{'http': '185.246.84.7:8080', 'https': '185.246.84.7:8080'}, 0],
 [{'http': '130.61.100.135:80', 'https': '130.61.100.135:80'}, 1]]

# 现有去重逻辑
temporary_list=[]
for i in TRIAL:
    if i[0] not in [item[0] for item in temporary_list]:
        temporary_list.append(i)

# 期望输出
# [[{'http': '46.101.160.223:80', 'https': '46.101.160.223:80'}, 0],
#  [{'http': '66.70.178.214:9300', 'https': '66.70.178.214:9300'}, 0],
#  [{'http': '130.61.100.135:80', 'https': '130.61.100.135:80'}, 0],
#  [{'http': '157.245.27.9:3128', 'https': '157.245.27.9:3128'}, 0],
#  [{'http': '185.246.84.7:8080', 'https': '185.246.84.7:8080'}, 0]]

优化方案

1. 高性能去重(时间复杂度O(n))

原代码每次判断都要生成新列表,时间复杂度为O(n²),数据量大时效率极低。可以将字典转换为可哈希的元组,用集合记录已出现的特征,将判断操作优化为O(1):

seen = set()
result = []
for d, num in TRIAL:
    # 把字典键值对排序后转成元组,确保内容相同的字典生成一致的哈希键
    key = tuple(sorted(d.items()))
    if key not in seen:
        seen.add(key)
        result.append([d, num])

2. 一行式实现(基于字典特性)

利用字典键的唯一性,可以实现一行代码去重。注意:默认会保留重复项中最后出现的子列表,若需保留第一个出现的,需反转列表后处理:

# 保留最后一个出现的重复项
result = list({tuple(sorted(item[0].items())): item for item in TRIAL}.values())

# 保留第一个出现的重复项
result = list({tuple(sorted(item[0].items())): item for item in reversed(TRIAL)}.values())[::-1]

3. 关于列表推导式的说明

纯列表推导式是无状态的,无法在推导过程中记录已出现的元素,因此没法直接用纯列表推导式实现高效去重。上面的一行式本质是利用字典的特性,而非纯列表推导。

关键注意点

  • 转换字典为元组时必须排序:Python3.7+字典有序,但低版本无序,排序能保证内容相同的字典生成一致的哈希键,避免误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:57:51