dictsのdictを使用することを検討してください。
#!/usr/bin/env python
import re
import pprint
raw = """'01bpar(2)= 0.23103878E-01 half_life= 0.3000133E+02 relax_time= 0.4328278E+02',
'01bpar(3)= 0.00000000E+00',
'02epar(1)= 0.49998963E+02',
'02epar(2)= 0.23103878E-01 half_life= 0.3000133E+02 relax_time= 0.4328278E+02',
'02epar(3)= 0.00000000E+00',
'02epar(4)= 0.17862340E-01 half_life= 0.3880495E+02 relax_time= 0.5598371E+02',
'02bpar(1)= 0.49998962E+02',
'02bpar(2)= 0.23103878E-01 half_life= 0.3000133E+02 relax_time= 0.4328278E+02',"""
datastruct = {}
pattern = re.compile(r"""\D(?P<digits>\d+)(?P<field>[eb]par)[^=]+=\D+(?P<number>\d+\.\d+E[+-]\d+)""")
for line in raw.splitlines():
result = pattern.search(line)
parts = result.groupdict()
if not parts['digits'] in datastruct:
datastruct[parts['digits']] = {'epar':[], 'bpar':[]}
datastruct[parts['digits']][parts['field']].append(parts['number'])
pprint.pprint(datastruct, depth=4)
が生成されます
{'01': {'bpar': ['0.23103878E-01', '0.00000000E+00'], 'epar': []},
'02': {'bpar': ['0.49998962E+02', '0.23103878E-01'],
'epar': ['0.49998963E+02',
'0.23103878E-01',
'0.00000000E+00',
'0.17862340E-01']}}
改訂版をコメントに照らして:
pattern = re.compile(r"""\D(?P<digits>\d+)(?P<field>[eb]par)[^=]+=\D+(?P<number>\d+\.\d+E[+-]\d+)""")
default = lambda : dict((('epar',[]), ('bpar',[])))
datastruct = defaultdict(default)
for line in raw.splitlines():
result = pattern.search(line)
parts = result.groupdict()
datastruct[parts['digits']][parts['field']].append(parts['number'])
pprint.pprint(datastruct.items())
生成:
[('02',
{'bpar': ['0.49998962E+02', '0.23103878E-01'],
'epar': ['0.49998963E+02',
'0.23103878E-01',
'0.00000000E+00',
'0.17862340E-01']}),
('01', {'bpar': ['0.23103878E-01', '0.00000000E+00'], 'epar': []})]
をあなたは私が構築するのに失敗する」ことで、正確にはどういう意味ですか構造"?あなたは何を試してみることができますか? – unholysampler
私は何をしたのかをはっきりと理解することなく、私が持っている混乱です。あなたがもっと理解している生地回答が提供されていてもそれが貢献すると思うなら、私はそれを投稿します。 – TheMeaningfulEngineer