首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中获取TypeError

在Python中获取TypeError
EN

Stack Overflow用户
提问于 2018-06-18 01:54:05
回答 1查看 54关注 0票数 -3

我希望解析家谱数据,目标是创建一个包含名称、日期和出现次数的字典(以确保没有重复的单个条目)。下面是一个示例:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
'''

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_dictname = arguments TypeError: unhashable type:'list‘

我已经尝试了很多方法,包括将我的列表变成一个元组,但似乎都不起作用。很抱歉,如果这看起来是一个基本的问题,我是编程新手,我已经被卡住了一段时间!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-18 02:16:21

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

list不是hashable类型。但是,元组是。因此,它应该与元组一起工作。

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

根据您的错误,以下是答案

代码语言:javascript
复制
person_dict[name] = arguments

这里的第一件事是一个list

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

代码语言:javascript
复制
person_dict[tuple(name)] = arguments

请注意,即使元组中有一个元素作为列表,它也是不可哈希的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50899140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档