为了账号安全,请及时绑定邮箱和手机立即绑定

键值对的可能值不可散列?

键值对的可能值不可散列?

RISEBY 2021-03-29 10:30:20
我知道您不能在Python字典中使用列表作为键,因为它是可变的,因此不可散列(或类似的东西)。但是我似乎在而value不是上遇到此错误key。这是我的一些代码:sp_eq = {}sp_list = []def build_sp_eq(row):    # dbrefs is a dict, i.e { reference_type : id_of_that_gene}    dbrefs = row.get('dbReference')    print('dbrefs - ' +str(dbrefs))    gene_ids = []    for k, v in dbrefs.items():        if k == 'GeneId':            gene_ids.append(v)    # new ID if more than 1 entrez reference    if len(gene_ids) > 1:                print('More than 1 GeneId for: ' +str(row.get('name')))                sp_eq[row.get('name')] = uuid.uuid4()    if len(gene_ids) == 0:        # new if 0 entrez references        sp_eq[row.get('name')] = uuid.uuid4()        sp_list.append(row.get('name'))    # if only one entrez ref, use the entrez uuid    elif len(gene_ids) == 1:        pdb.set_trace()        print('type of row.get('name'): ' +str(type(row.get('name'))))        sp_eq[row.get('name')] = entrez_eq.get(v)这是解释器的输出:dbrefs - {'HGNC': ['HGNC:4931']}dbrefs - {'HGNC': ['HGNC:4931']}dbrefs - {'HGNC': ['HGNC:4932']}dbrefs - {'MGI': ['MGI:1920949'], 'GeneId': ['73699']}type of row.get('name'): <class 'str'>Traceback (most recent call last):  File "./gp_baseline.py", line 303, in <module>    make_namespace(x, parser)  File "./gp_baseline.py", line 247, in make_namespace    build_sp_eq(row)  File "./gp_baseline.py", line 144, in build_sp_eq    sp_eq[row.get('name')] = entrez_eq.get(v)TypeError: unhashable type: 'list'如您所见,key在这种情况下,row.get('name')的类型为String,应该可以。另外,据我了解,使用列表作为此处的值也应该很好。关于这里可能发生什么的任何想法?
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

问题是该行的另一半entrez_eq.get(v)。在那里,您将列表v用作推测为dict或其他映射的键。


(您可以说v是一个,list因为它是from中的一个值dbrefs,并且您进行打印dbrefs,所以它是['MGI:1920949']或['73699']。)


每当遇到这样的问题(无法弄清错误来源)时,请尝试将其分解为几部分。代替这个:


sp_eq[row.get('name')] = entrez_eq.get(v)

做这个:


key = row.get('name')

value = entrez_eq.get(v)

sp_eq[key] = value

然后,您可以找出表达式的三个子部分中的哪一个正在上升—并且,如果仍然不知道为什么,则可以访问中间值和类型,因此可以对其进行记录。


查看完整回答
反对 回复 2021-04-01
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信