我正在尝试使用以这种格式排列的文件构建两个单独的字典:
我需要把名字倒过来,所以名字然后姓氏,对于第一个字典,我需要把名字作为键,把第一个块中的其他名字作为值,即字符串列表。
第二个字典我需要再次使用名字作为键,将它们所属的组或组作为值。
我已经想出了如何使用逗号反转名称来拆分它们,但是我最终得到了所有名称的列表,这些名称实际上根本无法帮助我将它们分开。
我真的很困惑如何迭代它以提取这些特定行,然后将它们作为键与其他特定行作为值相关联。特别困惑我如何将名字作为键,然后将以下名称作为值,然后跳过空白行并重新开始,但使用新键。
文本文件格式:
没有项目符号的文本文件的格式完全像这样,如果只包含第一个块,则所需的输出 diciotanries 将如下所示:
Person_to_friends = {'Leah Connors' : ['Frank Connors', 'Shawn Patterson', 'John Patterson']}
Persons_to_networks = {'Leah Connors' : ['Flying Club']}
当我尝试测试您的代码时,我收到了一个索引错误
- 康纳斯,利亚
- 飞行俱乐部
- 康纳斯,弗兰克
- 帕特森,肖恩
帕特森,约翰
科斯莫,卡尔文
- 帆船小伙伴
- 闪避球组
- 帕特森,肖恩
帕特森,莎莉
康纳斯,弗兰克
- 赛艇学校
- 康纳斯,利亚
- 康纳斯,罗伯特
Cosmo, Calvin
应该是第二个块的Connors, Frank
一部分和第三个块的一部分,块之间有一个空格。有些东西不工作。我不知道为什么它一直在创造一个空间。
这是我到目前为止所拥有的,但我认为我真的很遥远..请帮助
def load_profiles(profiles_file, person_to_friends, person_to_networks):
f = open('profiles.txt')
lines = f.readlines()
new = []
line_number = 0
while line_number < len(lines)+1:
prev_line = lines[line_number-1]
line = lines[line_number]
from_line = lines[line_number+1]
if ',' in line and ',' not in from_line and from_line.isspace() == False:
key = reverse_name(line)
elif ',' not in line and line.isspace()==False:
new.append(line.strip('\n'))
try:
person_to_networks[key].append(new)
except KeyError:
person_to_networks[key] = [new]
elif line.isspace()== True:
line_number = from_line
line_number += 1