2

我有一个文本文件保存在记事本中,但移到了我的 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')
4

6 回答 6

6

很可能一些国家(例如新西兰)的名称中有多个单词,因此split()返回两个以上的项目,但无论如何您都试图将结果分配给两个变量。限制split为一个:

key, value = line.split(None, 1)

如果你发现最后有多余的空格,请strip()在其中输入:

key, value = line.strip().split(None, 1)
于 2013-07-15T12:12:59.610 回答
2

It looks like you want to split description from a country code... The following will cater for empty descriptions or descriptions of more than one word

with open('input') as fin:
    country_lookup = dict(line.strip().partition(' ')[::2] for line in fin)
于 2013-07-15T12:17:11.517 回答
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)
于 2013-07-15T12:19:38.357 回答
1

发生的事情是文件中的一行有多个空格,因此一行可能如下所示:

hi hello hey

这样做时line.split(),您将获得:

['hi', 'hello', 'hey']

您试图将其分配给两个变量,但列表中有 3 个元素。因此错误。

为避免这种情况,您必须优化拆分使其仅拆分一次,或仅拆分一次:

key, value = line.split(' ', 1)

或者,如果您使用的是 python 3,则可以将列表的其余部分解压缩为该值:

key, *value = line.split()
于 2013-07-15T12:12:27.520 回答
1

您的其中一行必须有多个空格,因此split()返回的值多于key,value = line.split().

于 2013-07-15T12:13:31.253 回答
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')
于 2013-07-15T12:13:41.723 回答