2017-10-19 49 views
1

我有一个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']] 
+0

您正在使用列表,而不是字典。列表使用方括号'[...]',字符串使用大括号'{...}' –

回答

0

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

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

变化

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

非常感谢你@galaxyan!它的工作:) – lilia

+0

@ lilia没有问题:) – galaxyan

+0

@ lilia接受它,如果你喜欢:) – galaxyan

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 = ''将解决这个问题,但要放在词典上面的代码将有所帮助,这将列出一个特定的键。快乐的编码!