Python:当key是一个列表时从字典中获取value



我有一个字典,其中键是一个列表

cfn = {('A', 'B'): 1, ('A','C'): 2 , ('A', 'D'): 3}
genes = ['A', 'C', 'D', 'E']

我试图从字典中获得一个值,如果在关键的基因对存在于一个列表在一起。我的尝试如下,但我得到TypeError: unhashable type: 'list'

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])

所需输出:

network = [['A','C', 2], ['A', 'D', 3]]

基于以下评论和回答的解决方案:edge = cfn.get((genes[i], genes[j]),0)

您在cfn中的键是tuple类型,因为键需要是可哈希类型

哈希类型是immutable数据类型,例如:

int
  • 字符串
  • 元组
  • frozenset

,因为它们不能被改变或突变。否则不能访问存储在该键下的值。

在这里你只需要把[]改成():

def create_networks(genes, cfn):
network = list()
for i in range(0, len(genes)):
for j in range(1, len(genes)):
# Use () to create a tuple
edge = cfn.get((genes[i], genes[j]),0)
if edge > 0:
network.append([genes[i], genes[j], edge])
return network

这样你就不会得到错误而得到你期望的

结果
>>> create_networks(genes, cfn)
[['A', 'C', 2], ['A', 'D', 3]]

你可以这样做:https://onecompiler.com/python2/3yp8xepzp

cfn = {'AB': 1, 'AC': 2 , 'AD': 3}
genes = ['A', 'C', 'D', 'E']
def create_networks(genes, cfn):
network = []
for i in range(0, len(genes)):
for j in range(1, len(genes)):
keyy = genes[i]+''+genes[j]
if keyy in cfn.keys():
edge2 = cfn[genes[i]+''+genes[j]]
if edge2 > 0:
network.append([genes[i], genes[j], edge2])
return network
print(create_networks(genes,cfn))

相关内容

  • 没有找到相关文章

最新更新