从文件中读取内容并将其转换为词典

2024-09-29 00:17:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,其内容如下:

State Texas
Austin
 Houston
 Dallas
State Florida
Orlando
Miami
Jacksonville
Naples
!
State California
San Diego
Los Angeles
San Francisco

目标:我想从这个文本文件中阅读并把它们变成字典,应该是这样的-

state_dict = {
    'Texas': ['Austin', 'Houston', 'Dallas'], 
    'Florida': ['Orlando', 'Miami', 'Jacksonville', 'Naples'], 
    'California': ['San Diego', 'Los Angeles', 'San Francisco']
}

到目前为止,我的代码是:

State_Dict = {}
with open('state.txt', 'r') as main_fd:

for mystate in main_fd:
    mystate = mystate.lstrip()

    if ("State" in mystate):
        state_key = "_".join(mystate.split()[1:])
        State_Dict[state_key] = []

        for cities in main_fd:
            if ("!" in cities):
                break

            else:
                State_Dict[state_key].append(cities.rstrip())

print(State_Dict)

但结果是:

{
'Texas': [
    ' Austin', ' Houston', ' Dallas', 
    'State Florida', ' Orlando', ' Miami', 
    ' Jacksonville', ' Naples'
    ], 
'California': [
    ' San Diego', ' Los Angeles', ' San Francisco'
    ]
}

我该怎么解决这个问题?你知道吗


Tags: indictstatesanaustintexashoustonmiami
2条回答

你的代码的问题是,你停止寻找一个州的城市时,你发生“!”但城市的新部分也用以“州”开头的线表示。 另一个错误是,您每次从一开始就迭代城市,而不是当前所在的州。你知道吗

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']}

你要找的是这样的东西。 考虑循环一次遍历一行,并为您的条件构建一系列检查。如果这不起作用,让我知道,没有测试就写了。你知道吗

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)

相关问题 更多 >