Python:从键为元组的字典取值遇TypeError报错的解决方法
字典键为元组时的取值报错解决
问题场景
给定键为元组的字典和基因列表,想要匹配基因列表内的配对并获取对应键值,原代码运行时报错:
cfn = {('A', 'B'): 1, ('A','C'): 2 , ('A', 'D'): 3} genes = ['A', 'C', 'D', 'E']
原实现函数:
def create_networks(genes, cfn): network = list() for i in range(0, len(genes)): for j in range(1, len(genes)): edge = cfn.get([genes[i], genes[j]],0) if edge > 0: network.append([genes[i], genes[j], edge])
报错信息:TypeError: unhashable type: 'list'
期望输出:
network = [['A','C', 2], ['A', 'D', 3]]
报错原因
字典的键必须是可哈希类型,列表属于不可哈希类型,而目标字典的键是元组,用列表作为查找键时不符合要求,因此触发报错。
解决方案
将查找时的列表改为元组即可,元组是可哈希类型,与字典的键类型匹配。修改后的关键代码行:
edge = cfn.get((genes[i], genes[j]),0)
修正后的完整函数:
def create_networks(genes, cfn): network = list() for i in range(0, len(genes)): for j in range(1, len(genes)): edge = cfn.get((genes[i], genes[j]),0) if edge > 0: network.append([genes[i], genes[j], edge])
运行修正后的代码即可得到期望输出。
内容的提问来源于stack exchange,提问作者keenan
相关产品推荐
相关产品推荐

