[英]Can't figure out why appending to list isn't working
我正在遍历列表以生成一些json。 但是当我追加到listToSave时出现错误。
listToSave = []
for i in range(len(ffts)):
dataT = dataTemplate
dataT['aClip']['info']['id'] = str(uuid.uuid4())
#More stuff added here
print dataT['aClip']['info']['id']
listToSave.append(dataT)
print 'Data formated - Ready to save'
并输出:
493838a3-de8e-4bc4-86a4-92999bd625bd
c7c6f984-85b5-478b-9395-48ebd8611ab8
d427dd05-063c-49de-bbff-70b09c56f1fa
98dc6ef5-182d-4963-bc0d-7537bd3ca9e2
74587d54-811c-485e-bbed-1428723a6da1
5052f46e-371d-4bec-b750-e231abd3448d
Data formated - Ready to save
但是,当我查看listToSave列表时,我只看到重复生成的最后一个值。
print len(toSave)
print toSave[0]['aClip']['info']['id']
print toSave[1]['aClip']['info']['id']
print toSave[2]['aClip']['info']['id']
print toSave[3]['aClip']['info']['id']
print toSave[4]['aClip']['info']['id']
print toSave[5]['aClip']['info']['id']
输出:
6
5052f46e-371d-4bec-b750-e231abd3448d
5052f46e-371d-4bec-b750-e231abd3448d
5052f46e-371d-4bec-b750-e231abd3448d
5052f46e-371d-4bec-b750-e231abd3448d
5052f46e-371d-4bec-b750-e231abd3448d
5052f46e-371d-4bec-b750-e231abd3448d
救命?
有关完整示例的dataTemplate。 虽然,我相信我在没有此操作的情况下尝试了它,但它仍然运行了。
dataTemplate = {
"aClip": {
"info" : {
"id" : None,
"type" : None,
"author" : None,
"timeStamp" : None,
"output" : None,
},
"t": {
"tData": None,
"tFs" : None,
"tLen" : None,
},
"f" : {
"fData" : None,
"fFreq" : None,
"fLen" : None,
}
}
}
问题是dataT = dataTemplate
。
您可能认为您正在循环的每次迭代中创建并分配一个新的 dataTemplate对象。 但是,实际上,整个程序中只有一个。 因此, dataT['aClip']['info']['id'] = str(uuid.uuid4())
每次都覆盖相同的字符串,并且您已将多个引用添加到同一 dataTemplate。
dataTemplate
是一个类吗? 如果是这样,您可以通过将dataT = dataTemplate
更改为dataT = dataTemplate()
来修复程序。 如果不是课程,则需要解释您要做什么。
您每次都将对dataTemplate的引用附加到列表中。 如果检查列表中的内存地址,您会发现它们指向相同的确切内存位置。
因此,您将只有最后一个值。
我不确定您的dataTemplate
是什么。 如果是一堂课,您需要每次创建一个新的课。 如果是python字典或某些JSON,也是如此。
正如其他人已经说过的,您在for
循环的每次迭代中都传递相同的元素。 尽管我不知道dataTemplate
是什么样的,但假设uuid
随i
不同,似乎可以使用defaultdict
。
from collections import defaultdict
dataT = defaultdict(str)
for i in range(len(ffts)):
dataT[str(uuid.uuid4())] = 'somedata'
#More stuff added here
print('Data formated - Ready to save')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.