如何在python中编写json时修复重复值

如何在python中编写json时修复重复值,python,json,Python,Json,我有两个文件,在读取了这两个文件之后,我将其写入python中的json文件。问题是在最后一个json文件中,我得到了重复的json对象,并附加了最后一个json对象 我能够读取文件并生成json文件 import json data2 = {} data1 = [] i = 1 with open('abc3') as json_file: f=open("abc2", "r") data = json.load(json_file) lines =f.readli

我有两个文件,在读取了这两个文件之后,我将其写入python中的json文件。问题是在最后一个json文件中,我得到了重复的json对象,并附加了最后一个json对象

我能够读取文件并生成json文件

import json

data2 = {}
data1 = []
i = 1

with open('abc3') as json_file:
    f=open("abc2", "r")
    data = json.load(json_file)
    lines =f.readlines()
    for p,x in zip(data['Url'],lines):
        print(p['Urls'])
        print(x)
        print(i)
        print('')
        data2['videoId'] = i
        data2['videoUrl'] = p['Urls']
        data2['videName'] = x
        i = i + 1   
        data1.extend(data2)



with open('data1.json', 'w') as outfile:
    json.dump(data1, outfile)

重用data2的相同引用是主要问题。在每次迭代中创建一个字典

如果执行data1.extenddata2,当您想要创建字典列表时,extend会在字典的键上进行迭代

快速修复:

for p,x in zip(data['Url'],lines):
    print(p['Urls'])
    print(x)
    print(i)
    print('')
    data2 = {}
    data2['videoId'] = i
    data2['videoUrl'] = p['Urls']
    data2['videName'] = x
    i = i + 1   
    data1.append(data2)
但列表理解会更清晰、更符合python的注释:不要读这些行,直接使用f,这样可以避免无用的文件读取:

data1 = [{"videoId":i,"videoUrl":p['Urls'],'videoName':x.rstrip()}
          for i,(p,x) in enumerate(zip(data['Url'],f),1)]
这将在每次迭代中创建一个字典。i从1开始使用enumerate替代副作用。请注意,当逐行读取文件时,删除行尾字符所需的rstrip操作

总而言之,下面是我如何重写完整代码的:

import json

with open('abc3') as json_file:
    data = json.load(json_file)

with open("abc2") as f:
    data1 = [{"videoId":i,"videoUrl":p['Urls'],'videoName':x.rstrip()}
              for i,(p,x) in enumerate(zip(data['Url'],f),1)]

with open('data1.json', 'w') as outfile:
    json.dump(data1, outfile)

典型错误:在循环中创建data2={},否则共享相同的引用。当data1.extenddata2:您可能是指data1.appenddata2,或者您只是将键添加到list@Jean-弗朗索瓦·法布,谢谢。。固定的我是python新手。它就在那里。。