我有一个保存在记事本中的文本文件,但是移动到我的python文件夹中,左边是一个国家的三个字母的缩写,然后是右边的四到五个空格,它有一个与之对应的国家:
AFG阿富汗
ARM亚美尼亚
等
我需要字典使用三个字母作为关键,而国家是值。它有每个参加奥运会的国家。这是我的代码到目前为止的样子:
def country(fileName):
infile = open(fileName,'r')
countryDict = {}
for line in infile:
key,value = line.split()
countryDict[key] = value
print(countryDict)
return countryDict
country('CountryCodes.txt')
答案 0 :(得分:6)
很可能某些国家(例如新西兰)的名字中有多个单词,因此split()
返回的内容超过两个,但您尝试将结果分配给两个变量而不管。将split
限制为一个:
key, value = line.split(None, 1)
如果您发现最后会有多余的空白,请在其中添加strip()
:
key, value = line.strip().split(None, 1)
答案 1 :(得分:2)
看起来您想要从国家/地区代码中拆分说明...以下内容将适用于空白描述或多个单词的描述
with open('input') as fin:
country_lookup = dict(line.strip().partition(' ')[::2] for line in fin)
答案 2 :(得分:2)
使用这个神奇的功能:
def parse_country_codes(file_path):
with open(file_path) as f:
return dict(line.split(None, 1) for line in f if line)
答案 3 :(得分:1)
正在发生的事情是你文件中的一行有多个空格,所以一行可能如下所示:
hi hello hey
在执行line.split()
时,您将获得:
['hi', 'hello', 'hey']
您尝试分配给两个变量,但列表中有3个元素。因此错误。
要避免这种情况,您必须优化分割,使其仅拆分一次,或仅拆分一次:
key, value = line.split(' ', 1)
或者,如果您使用的是python 3,则可以将列表的其余部分解压缩到值:
key, *value = line.split()
答案 4 :(得分:1)
您的其中一行必须有多个空格,因此split()
返回的值超过key,value = line.split()
预期的两个值。
答案 5 :(得分:1)
某些国家/地区将使用多个单词作为名称,因此您最终会得到多个值字段,请尝试:
def country(fileName):
infile = open(fileName,'r')
countryDict = {}
for line in infile:
key = line[0:3]
value = line[3:].strip()
countryDict[key] = value
print(countryDict)
return countryDict
country('CountryCodes.txt')