この形式で配置されたファイルを使用して、2 つの個別の辞書を作成しようとしています。
名前を逆にする必要があるので、名前の次に姓を入力します。最初の辞書では、名前をキーとして、最初のブロックの他の名前を値、つまり文字列のリストとして使用する必要があります。
2 番目の辞書では、最初の名前をキーとして使用し、値として属しているグループを指定する必要があります。
コンマを使用して名前を逆に分割する方法を見つけましたが、最終的にはすべての名前のリストになり、それらを分離するのにまったく役立ちません。
これを繰り返してこれらの特定の行を引き出し、それらをキーとして他の特定の行に値として関連付ける方法について、私は本当に混乱しています。最初の名前をキーとして取得し、次の名前を値として取得し、空白行をスキップして新しいキーでやり直す方法について特に混乱しています。
テキストファイル形式:
テキスト ファイルの形式は、箇条書きなしではまったく同じです。最初のブロックだけが含まれている場合、目的の出力辞書は次のようになります。
Person_to_friends = {'Leah Connors' : ['Frank Connors', 'Shawn Patterson', 'John Patterson']}
Persons_to_networks = {'Leah Connors' : ['Flying Club']}
コードをテストしようとしたときに、インデックス エラーが発生しました
- コナーズ、リア
- フライングクラブ
- コナーズ、フランク
- パターソン、ショーン
ジョン・パターソン
コスモ、カルヴィン
- セーリング仲間
- ドッジボール組
- パターソン、ショーン
パターソン、サリー
コナーズ、フランク
- ローイングスクール
- コナーズ、リア
- ロバート・コナーズ
Cosmo, Calvin
Connors, Frank
は 2 番目のブロックの一部であり、ブロック間に 1 つのスペースがある 3番目のブロックの一部であると想定されています。何かが機能していません。スペースを作成し続ける理由がわかりません。
これは私がこれまでに持っているものですが、私は本当に遠いと思います..助けてください
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