在将清理数据附加到字典时获取重复值

时间:2017-10-19 14:25:15

标签: python dictionary for-loop if-statement

我有一个txt文件,我需要提取一些值并组织为字典 这是所需的格式! {State: Town}

例如{'Alabama': 'Auburn', Alabama: 'Florence'....'Wyoming': 'Laramie'}

这是我的代码:

with open('my.txt') as file:
    output = []
    current_state = ""
    region = ""
    for line in file:
        if (len(line.split("[edit]")) == 2):
            current_state = line.split("[edit]")[0]
        else:
            region = line.split(" (")[0]
        if (region != ""):
            output.append([current_state, region])
    return output

但是,我的代码没有按照我的意愿去做。感觉就像我存储先前提取的“区域”值并将其附加到下一个状态。所以逻辑有问题,我不确定究竟是什么。

[['Alabama', 'Auburn'],
 ['Alabama', 'Florence'],
 ['Alabama', 'Jacksonville'],
 ['Alabama', 'Livingston'],
 ['Alabama', 'Montevallo'],
 ['Alabama', 'Troy'],
 ['Alabama', 'Tuscaloosa'],
 ['Alabama', 'Tuskegee'],
 ['Alaska', 'Tuskegee'],
 ['Alaska', 'Fairbanks'],
 ['Arizona', 'Fairbanks'],
 ['Arizona', 'Flagstaff'],
 ['Arizona', 'Tempe'],
 ['Arizona', 'Tucson'],...]

正如你所看到的那样,我将获得'费尔班克斯'2次,首先是附加到阿拉斯加,这是正确的,其次是附加到亚利桑那州,这是不正确的。我发生在我所有的州。

...
 ['Alaska', 'Fairbanks'],
 ['Arizona', 'Fairbanks'],
...
 ['Wisconsin', 'Whitewater'],
 ['Wyoming', 'Whitewater'],
 ['Wyoming', 'Laramie']]

2 个答案:

答案 0 :(得分:0)

您没有重置该区域,因此它存储以前的结果。

if (region != ""):
  output.append([current_state, region])

更改为

if (region != ""):
  output.append([current_state, region])
  region = ''

答案 1 :(得分:0)

如果你真的想把这些值放到字典中,那么

with open('my.txt') as file:之前

,添加country = dict()

并且在循环内部可以用作

if (region != ""):
        output.append([current_state, region])
        if current_state in country:

            country[current_state].append(region)
        else:
            country[current_state] = []
            country[current_state].append(region)
        region = ''

对于你的问题,region = ''将解决问题,但是在字典中输入上述代码将有所帮助,这将为特定密钥创建一个列表。快乐的编码!