Получить значения (в пределах набора) из словаря в словаре - PullRequest
0 голосов
/ 27 февраля 2019

Я уже рассмотрел их, но пока не повезло 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], но это также дает мне «неразрешимую» ошибку.Может кто-нибудь дать мне несколько указаний?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы пытаетесь использовать cluster в качестве ключа, но на самом деле cluster - это ваше значение, и это также словарь.

Вы можете перебирать cluster так же, как вы делали с вашим основнымсловарь:

for organism, cluster in clusterdict.items():
    for key, value in cluster.items():
        ...

Ошибка TypeError: unhashable type: 'dict' произошла из-за того, что ключи должны быть хэшируемыми, а cluster - это словарь, который не хэшируется.

Но опять же,вы не хотите использовать кластер в качестве ключа, потому что кластер - это ваше значение, просто ваше значение также является ключом с ключами и значениями.

...