繁体   English   中英

创建字典的字典:循环

[英]creating dict of dicts: looping

我想使用循环创建词典字典(DofD)。 在循环内部,将设置我的“ subdict”变量,然后将新名称添加到DofD中。

我从文件中读取内容,并根据定界符“ ####”将内容分成多个块,这些定界符将每个子字典中的内容分开。 我基于该块中的字段之一来命名DofD中的每个条目。

我很困惑,因为我的输出DofD具有正确命名的条目,但是所有子对象中的所有信息都是相同的。 所有值都反映了最后一个子字典的内容。

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]]}

我手工制作了一个示例,以创建词典字典,以确保我的语法没有奇怪:

d1={'Name': 'name1', 'Value': 30}

d2={'Name': 'name2', 'Value': 29}

d3={}
d3[d1['Name']]=d1
d3[d2['Name']]=d2 

d3

{'name1':{'Name':'name1','Value':30},'name2':{'Name':'name2','Value':29}}

这工作了。

我在循环中搞砸了什么?

因此,问题在于我的DofD中的条目实际上只是对我循环中该下位对象的引用。 这意味着我的DofD只有一堆名称不同的条目,它们都指向相同的下标。 该下标的内容随每次迭代而变化,并最终反映出我循环中最后一次的块值。 因此,DofD中的所有条目都显示了相同的一组下标值。

我决定不在每次迭代中创建一个不同名称的子对象,而是决定将子对象的deepcopy()放入DofD中,以便每个条目保持其唯一的内容。

我的代码现在看起来像:

    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]]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM