2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
你正在尋找的是這樣的東西。考慮一次遍歷一行的循環(huán),并為您的條件構(gòu)建一系列檢查。附注。如果這不起作用,請(qǐng)告訴我,未經(jīng)測(cè)試就編寫(xiě)它。
State_Dict = {}
with open('state.txt', 'r') as main_fd:
for line in main_fd:
line = line.strip() #left and right stripped
#if ("state" in line.lower()): #better version suggested in comments to handle 'state' and 'State'.
if ("State" in line):
state_key = "_".join(line.split()[1:])
State_Dict[state_key] = []
elif ("!" in line):
continue #goes to next iteration of loop instead of stopping the loop unlike break
else: #assuming last case
State_Dict[state_key].append(line) #line has already been stripped
print(State_Dict)

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
你的代碼的問(wèn)題是當(dāng)你出現(xiàn)“!”時(shí),你正在停止尋找一個(gè)州的城市。但城市的新部分也由以“State”開(kāi)頭的線表示。另一個(gè)錯(cuò)誤是您每次都從頭開(kāi)始迭代城市,而不是您當(dāng)前所處的狀態(tài)。
State_Dict = {}
main_fd = '''\
State Texas
Austin
Houston
Dallas
State Florida
Orlando
Miami
Jacksonville
Naples
!
State California
San Diego
Los Angeles
San Francisco\
'''.splitlines()
for idx, mystate in enumerate(main_fd):
if "State" in mystate:
state_key = "_".join(mystate.split()[1:])
State_Dict[state_key] = []
for cities in main_fd[idx+1:]:
if '!' in cities or "State" in cities:
break
else:
State_Dict[state_key].append(cities.rstrip())
print(State_Dict)
輸出:
{'Florida': ['Orlando', 'Miami', 'Jacksonville', 'Naples'],
'California': ['San Diego', 'Los Angeles', 'San Francisco'],
'Texas': ['Austin', 'Houston', 'Dallas']}
添加回答
舉報(bào)