ループを使用して辞書の辞書 (DofD) を作成したいと考えていました。ループ内で、「subdict」変数が設定され、新しい名前で DofD に追加されます。
ファイルから読み取り、区切り文字「####」に基づいてコンテンツをブロックに分割します。これにより、各サブ辞書で必要なものが区切られます。ブロック内のフィールドの 1 つに基づいて、DofD の各エントリに名前を付けます。
私の出力 DofD には適切な名前のエントリがあったため、混乱しましたが、サブディクト全体の情報はすべて同一でした。すべての値は、最後の sub-dict の内容を反映しています。
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}}
これはうまくいきました。
ループで何を台無しにしましたか?