我已经看过这些了,但是到目前为止还没有运气 stackquestion1 stackquestion2 stackquestion3以及许多其他。似乎总是不同吗?
我真的认为这是一个简单的解决方案,但是我已经尝试了几个小时。我想在for循环中获取嵌套字典的值。我这里有一个简化的示例:
def write_to_file(class_set, clusterdict, outfile):
with open(outfile, "w") as outputfile:
writer = csv.writer(outputfile, delimiter='\t')
class_list = list(class_set)
header = ["\t"] + class_list
writer.writerow(header) # write header
for organism, cluster in clusterdict.items():
#print clusterdict.get(organism) # works, just to see if it does anything
line = []
#some stuff here that works, writing specific lines
#part that doesnt work
line.append(clusterdict.get(organism).get(cluster)) # gives TypeError: unhashable type: 'dict'
line.append(clusterdict.get(organism) # does work, but of course gives me the wrong dict values
writer.writerow(line)
字典看起来像这样。它是具有多个生物体的字典,并且具有多个簇的字典。因此,每个生物都有多个簇,以(有时是多个)集合作为值(我认为问题可能出在集合上?)
clusterdict =
'organism1':{'cluster1': [set(['value1', 'value2']) , [set(['value3', 'value4'])], 'cluster2: [set(['value5', 'value6']) , [set(['value7', 'value8'])]} ,
'organism2':{.......} ,
'organism3':{.......} , etc
我尝试了很多方法来获取值。例如dict [key1] [key2],但这也给了我“无法散列”的错误。有人可以给我一些指示吗?
答案 0 :(得分:1)
您正在尝试使用cluster
作为键,但实际上cluster
是您的值,并且它也是字典。
您可以像使用主词典那样遍历cluster
:
for organism, cluster in clusterdict.items():
for key, value in cluster.items():
...
它们的错误TypeError: unhashable type: 'dict'
是因为密钥必须是可哈希的,而cluster
是字典-不可哈希。
但是再说一次,您不想使用cluster作为键,因为cluster是您的值,只是您的值也是包含键和值的字典。