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

如何用Python去除JSON结构中的重复嵌套列表元素?

嵌套JSON列表去重的Python实现

问题场景

给定如下JSON结构:

{
  "acc_id": "AAA",
  "cont_id": "CCC",
  "location": [
    {
      "x": 123,
      "y": 323,
      "z": 444
    },
    {
      "x": 123,
      "y": 323,
      "z": 444
    },
    {
      "x": 123,
      "y": 323,
      "z": 444
    }
  ]
}

需要将其中location字段的重复嵌套对象去重,得到如下结果:

{
  "acc_id": "AAA",
  "cont_id": "CCC",
  "location": [
    {
      "x": 123,
      "y": 323,
      "z": 444
    }
  ]
}

用户尝试了以下代码,但无法处理内层嵌套对象的去重:

unique = {each[0]: each for each in k}.values()

解决方案

字典属于不可哈希类型,不能直接作为字典的键来实现去重,因此需要先将嵌套对象转换为可哈希的类型(比如元组),再利用字典的唯一性去重,最后转回字典格式。

方法一:遍历+字典记录去重

import json

# 假设原始数据已加载为Python字典
data = {
  "acc_id": "AAA",
  "cont_id": "CCC",
  "location": [
    {"x": 123, "y": 323, "z": 444},
    {"x": 123, "y": 323, "z": 444},
    {"x": 123, "y": 323, "z": 444}
  ]
}

# 对location列表去重
seen = {}
unique_locations = []
for loc in data["location"]:
    # 将字典转为排序后的元组,避免键顺序不同导致的误判
    key = tuple(sorted(loc.items()))
    if key not in seen:
        seen[key] = loc
        unique_locations.append(loc)

data["location"] = unique_locations

# 输出格式化后的结果
print(json.dumps(data, indent=2))

方法二:集合推导式简化写法

如果不需要保留原始对象的引用,可以用集合推导式快速生成唯一元组,再转回字典:

data["location"] = [dict(item) for item in {tuple(sorted(loc.items())) for loc in data["location"]}]

注意事项

  • 使用sorted(loc.items())是为了兼容不同键顺序的字典,避免因键顺序差异导致重复判定错误;如果能确保所有嵌套对象的键顺序完全一致,可以省略sorted(),直接用tuple(loc.items())作为键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:43:28