如何将 txt 文件中的行分组到嵌套字典 (Python)
How to group the line in txt file to nested dictionary (Python)
我有一个包含以下数据的 txt 文件:
Id_1 1111
Member_a 2222
Member_b 3333
Member_c 4444
Device_a 5555
Device_b 6666
Id_2 1234
Member_a 5678
Member_b 1345
Device_a 3141
Id_3 1317
Member_a 5643
Member_b 4678
Member_c 4654
Member_e 4674
member_f 2314
Device_a 4433
Device_b 4354
.
.
.
and so on
每个id中包含3个字段,每个字段都有不同数量的子字段(例如,一些id有4个成员,但有些只有2个成员)有什么办法可以组合这些将数据放入嵌套字典之类的东西中?
这是预期的输出:
{
'id': 'Id_1',
'member': [{'Member_a': 2222}, {'Member_b': 3333}, {'Member_c': 4444}],
'Device' : [{'Device_a': 5555}, {'Device_b': 6666}]
}
提前致谢!
在下面的代码中,“blankpaper.txt”包含您提供的文本。我构建了符合预期输出的字典,并将每个字典存储在列表 dicts
.
中
在我的版本中,我将最终输出中的所有字符串都设为小写,不过您可以根据需要相应地调整代码。我不确定您的数据文件是否有时在一行中有 member_f
,在另一行中有 Member_f
,或者这是否只是上面的错字。如果知道类似的信息,可以使代码更高效。
dicts = []
with open("blankpaper.txt") as f:
for line in f:
# if line not empty
if (split := line.split()):
a = split[0].lower()
b = a[0:a.rfind('_')]
if "id" == b:
temp = {'id': a, 'member': [], 'device': []}
dicts.append(temp)
elif "member" == b:
temp['member'].append({a: int(split[1])})
elif "device" == b:
temp['device'].append({a: int(split[1])})
print(dicts)
输出
[{'id': 'id_1', 'member': [{'member_a': 2222}, {'member_b': 3333}, {'member_c': 4444}], 'device': [{'device_a': 5555}, {'device_b': 6666}]}, {'id': 'id_2', 'member': [{'member_a': 5678}, {'member_b': 1345}], 'device': [{'device_a': 3141}]}, {'id': 'id_3', 'member': [{'member_a': 5643}, {'member_b': 4678}, {'member_c': 4654}, {'member_e': 4674}, {'member_f': 2314}], 'device': [{'device_a': 4433}, {'device_b': 4354}]}]
希望对您有所帮助。如果有任何问题或者这不是您想要的,请告诉我。
我有一个包含以下数据的 txt 文件:
Id_1 1111
Member_a 2222
Member_b 3333
Member_c 4444
Device_a 5555
Device_b 6666
Id_2 1234
Member_a 5678
Member_b 1345
Device_a 3141
Id_3 1317
Member_a 5643
Member_b 4678
Member_c 4654
Member_e 4674
member_f 2314
Device_a 4433
Device_b 4354
.
.
.
and so on
每个id中包含3个字段,每个字段都有不同数量的子字段(例如,一些id有4个成员,但有些只有2个成员)有什么办法可以组合这些将数据放入嵌套字典之类的东西中?
这是预期的输出:
{
'id': 'Id_1',
'member': [{'Member_a': 2222}, {'Member_b': 3333}, {'Member_c': 4444}],
'Device' : [{'Device_a': 5555}, {'Device_b': 6666}]
}
提前致谢!
在下面的代码中,“blankpaper.txt”包含您提供的文本。我构建了符合预期输出的字典,并将每个字典存储在列表 dicts
.
在我的版本中,我将最终输出中的所有字符串都设为小写,不过您可以根据需要相应地调整代码。我不确定您的数据文件是否有时在一行中有 member_f
,在另一行中有 Member_f
,或者这是否只是上面的错字。如果知道类似的信息,可以使代码更高效。
dicts = []
with open("blankpaper.txt") as f:
for line in f:
# if line not empty
if (split := line.split()):
a = split[0].lower()
b = a[0:a.rfind('_')]
if "id" == b:
temp = {'id': a, 'member': [], 'device': []}
dicts.append(temp)
elif "member" == b:
temp['member'].append({a: int(split[1])})
elif "device" == b:
temp['device'].append({a: int(split[1])})
print(dicts)
输出
[{'id': 'id_1', 'member': [{'member_a': 2222}, {'member_b': 3333}, {'member_c': 4444}], 'device': [{'device_a': 5555}, {'device_b': 6666}]}, {'id': 'id_2', 'member': [{'member_a': 5678}, {'member_b': 1345}], 'device': [{'device_a': 3141}]}, {'id': 'id_3', 'member': [{'member_a': 5643}, {'member_b': 4678}, {'member_c': 4654}, {'member_e': 4674}, {'member_f': 2314}], 'device': [{'device_a': 4433}, {'device_b': 4354}]}]
希望对您有所帮助。如果有任何问题或者这不是您想要的,请告诉我。