试图从文件中创建一个python字典,但我不断收到“太多的值来解压”这样的错误

时间:2013-07-15 12:10:05

标签: python file function dictionary

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

6 个答案:

答案 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')