【发布时间】:2021-01-22 11:22:25
【问题描述】:
我有一个json文件包含一个对象数组,文件里面的数据是这样的:
[
{‘name’: ‘A’,
‘address’: ‘some address related to A’,
‘details’: ‘some details related to A’},
{‘name’: ‘B’,
‘address’: ‘some address related to A’,
‘details’: ‘some details related to B’},
{‘name’: ‘C’,
‘address’: ‘some address related to A’,
‘details’: ‘some details related to C’}
]
我想删除多余的键值,所以输出应该是这样的:
[
{‘name’: ‘A’,
‘address’: ‘some address related to A’,
‘details’: ‘some details related to A’},
{‘name’: ‘B’,
‘details’: ‘some details related to B’},
{‘name’: ‘C’,
‘details’: ‘some details related to C’}
]
所以,我试过这段代码,在link:
import json
with open(‘./myfile.json’) as fp:
data= fp.read()
unique = []
for n in data:
if all(unique_data["address"] != data for unique_data["address"] in unique):
unique.append(n)
#print(unique)
with open(“./cleanedRedundancy.json”, ‘w’) as f:
f.write(unique)
但它给了我这个错误:
TypeError: string indices must be integers
【问题讨论】:
-
for n in data实际上会遍历文本data的每个符号,因此每个迭代n是文本的一个符号。那是你真正想要的吗? -
你必须解析 JSON。见How to parse JSON in Python?
-
另外
for unique_data["address"] in unique应该真的是for unique_data in unique。 -
@Arty,感谢您的回复,但请您再澄清一下,我并没有真正明白您所说的!
-
@n_dev 你能更详细地描述删除冗余条目的算法吗?然后我们可以创建一个工作代码来实现这样的算法。