Python 创建dict of dict:循环
我想使用一个循环创建一个字典字典(DofD)。在循环内部,我的'subct'变量将被设置,然后用一个新名称添加到DofD中 我从文件中读取内容,根据分隔符“#######”将内容拆分为块,分隔每个子目录中所需的内容。我根据块中的一个字段命名DofD中的每个条目 我很困惑,因为我的输出DofD有正确命名的条目,但是子部分的所有信息都是相同的。所有值都反映了最后一个子目录的内容Python 创建dict of dict:循环,python,Python,我想使用一个循环创建一个字典字典(DofD)。在循环内部,我的'subct'变量将被设置,然后用一个新名称添加到DofD中 我从文件中读取内容,根据分隔符“#######”将内容拆分为块,分隔每个子目录中所需的内容。我根据块中的一个字段命名DofD中的每个条目 我很困惑,因为我的输出DofD有正确命名的条目,但是子部分的所有信息都是相同的。所有值都反映了最后一个子目录的内容 idxs=[i for i,val in enumerate(fileContents) if val=='####\r\
idxs=[i for i,val in enumerate(fileContents) if val=='####\r\n']
paramsDict={}
for i in range(len(idxs)):
pos=idxs[i]
if i < len(idxs)-1: endLine=idxs[i+1]+1 # watch out for end of file
else: endLine=len(fileContents)
blockForSubDict=fileContents[idxs[i]+1:endLine]
paramsDict[blockForSubDict[0].split()[0]]={'Name': blockForSubDict[0].split()[0], 'Values' : [float(x.replace('\r\n','')) for x in blockForSubDict[5:lenBlock]]}
{'name1':{'Name':'name1','Value':30},
'name2':{'Name':'name2','Value':29}
这起作用了
我在循环中搞砸了什么?所以,问题是我的DofD中的条目实际上只是对循环中的子ct的引用。这意味着我的DofD只是有一堆不同名称的条目,它们都指向同一个子ct。子ct的内容随着每次迭代而改变,并最终通过我的循环反映上次的块值。因此,我的DofD中的所有条目都显示了相同的子ct值集 我决定在DofD中使用子ct的deepcopy(),以便每个条目都保持其唯一的内容,而不是在每次迭代中创建一个名称不同的子ct 我的代码现在看起来像:
import copy
...
paramsDict[blockForSubDict[0].split()[0]]={'Name':
copy.deepcopy(blockForSubDict[0].split()[0]),
'Values' :
[copy.deepcopy(float(x.replace('\r\n',''))) for x in blockForSubDict[5:lenBlock]]}
这不是一个问题-你应该把它改成一个问题,然后。转换成一个问题格式。
import copy
...
paramsDict[blockForSubDict[0].split()[0]]={'Name':
copy.deepcopy(blockForSubDict[0].split()[0]),
'Values' :
[copy.deepcopy(float(x.replace('\r\n',''))) for x in blockForSubDict[5:lenBlock]]}