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

如何去除JSON字符串中的重复字典并解决代码执行报错问题

解决多行JSON对象去重问题及修复'str' object has no attribute 'items'错误

你的代码核心问题有两个:

  • 读取解析方式错误:你的文件是每行一个独立JSON对象,不是标准JSON数组。你用data = a.read()读取整个文本后,json.dumps(data)只是把文本转成JSON字符串,再json.loads返回的还是原文本字符串,导致get_json是字符串类型。遍历字符串时每个d是单个字符,自然没有items()方法,触发报错。
  • 字典去重逻辑有缺陷:直接用tuple(d.items())会因为字典键的顺序不同(比如{"k1":52,"k2":39}和{"k2":39,"k1":52})被集合视为不同元素,无法正确去重。

正确实现步骤

  1. 逐行读取文件,每行解析为JSON字典对象;
  2. 将每个字典转换为排序后的键值对元组(保证键顺序不影响去重);
  3. 利用集合的自动去重特性处理这些元组;
  4. 将去重后的元组转回字典。

修复后的代码

import json

# 读取文件并逐行解析JSON对象
with open('aboba.json', 'r') as f:
    # 过滤空行,解析每行的JSON
    dicts_list = [json.loads(line.strip()) for line in f if line.strip()]

# 去重:将字典转成排序后的键值对元组(保证键顺序不影响去重)
unique_tuples = {tuple(sorted(d.items())) for d in dicts_list}
# 转回字典列表
unique_dicts = [dict(t) for t in unique_tuples]

print(unique_dicts)

代码说明

  • 使用with语句自动管理文件句柄,避免资源泄漏;
  • line.strip()过滤空行,避免解析空字符串报错;
  • sorted(d.items())将字典的键值对按键排序,确保键顺序不同但内容相同的字典被视为同一元素;
  • 集合推导式自动去重,最后转回字典列表。

输出结果

运行后会得到去重后的字典列表:

[{'k2': 35}, {'k3': 66, 'k2': 38}, {}, {'k1': 52, 'k2': 39}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:23:24