在Python中获取TypeError

时间:2018-06-17 17:54:05

标签: python python-3.x

我想解析家谱数据,目的是创建名称,日期和出现次数的字典(以确保没有重复的个别条目)。这是一个例子:

0 NOTE the lines until the next note are all correct
0 HEAD
0 jc INDI
1 NAME Jimmy /Connors/
1 SEX M
1 BIRT
2 DATE 1 JAN 1950
1 DEAT
2 DATE 31 DEC 2099
1 FAMC f1
1 FAMS f2
0 f2 FAM
1 HUSB jc
1 WIFE ce
1 CHIL aa
1 MARR 
2 DATE 1 JUN 1960
1 DIV
2 DATE 1 JUN 1961
0 TRLR
0 NOTE Everything past this line is invalid
0 INDI id
0 FAM id
0 NAME invalid
0 SEX invalid
0 BIRT invalid
0 DEAT invalid
0 FAMC invalid
0 FAMS invalid
0 MARR invalid
0 HUSB invalid
0 WIFE invalid
0 CHIL invalid
0 DIV invalid
0 DATE invalid
1 INDI invalid
1 FAM invalid
1 HEAD 
1 TRLR
1 DATE
1 NOTE bad note
1 DATE 1 JUN 2017
2 INDI id
2 FAM id
2 NAME invalid
2 SEX invalid
2 BIRT invalid
2 DEAT invalid
2 FAMC invalid
2 FAMS invalid
2 MARR invalid
2 HUSB invalid
2 WIFE invalid
2 CHIL invalid
2 DIV invalid
1 INVALID invalid
3 INVALID invalid
4 NOTE invalid

到目前为止,这是我的代码(不完整,因为我卡住了):

'''

No more than one individual with the same name and birth date
should appear in a GEDCOM file

'''
file_name = input("Give me a file name to parse (in single quotes): ")
target1 = 'NAME'
target2 = 'BIRT'
name = ''
count = 0
person_dict = {}

try:
    file = open(file_name)
except IOError:
    raise IOError("Can't open '{}'".format(file_name))

for index, line in enumerate(file):
    word = line.strip().split()
    if target1 in word:
        name = word[index-1:]
        arguments = " ".join(word[index-1:])
        person_dict[name] = arguments
        print(person_dict)
    elif target2 in word:
        birth = word[index-1:index+3]
        clean_bdate = " ".join(word[index-1:index+3])
        person_dict[date] = clean_bdate
        print(birth)
    else:
        print('not name')

'''
if duplicates are found...
    print("{} already exists. Removing duplicate entry.".format(arguments))
'''

我一直在

  

文件“user_story_1.py”,第24行,中       person_dict [name] =参数TypeError:不可用类型:'list'

我尝试了很多东西,包括让我的列表成为一个元组,但似乎没有任何工作。抱歉,如果这看起来像一个基本问题,我是编程的新手,我已经被困了一段时间!

1 个答案:

答案 0 :(得分:0)

在python中,dictionary只接受hashable类型作为键。

列表不是哈希类型。但是,元组是。所以,它应该与元组一起使用。

检查是否可以使用散列函数,如下所示

Hashable

根据您的错误,这是答案

person_dict[name] = arguments

此处name的第一件事是list

所以,只需将其转换为元组,如下所示

person_dict[tuple(name)] = arguments

注意,即使元组的一个元素作为列表,它也不可用。