Я очень новичок в Python, и я стараюсь изучить Python. Я пытаюсь реализовать алгоритм обнаружения сообщества, с которым я столкнулся, и я был бы очень признателен, если бы я мог получить помощь от кого-либо здесь.Добавление сортированного кортежа в словарь в качестве ключа
У меня есть defaultdict (список), мой вход, который выглядит следующим образом:
input = [('B', ['D']), ('D', ['E']), ('F', ['E']), ('G', ['D', 'F'])]
Здесь 'B', 'D', 'E' и т.д. представляют узлы в дереве. Ключ в словаре представляет детей узлы и значение представляет собой parent узлы. Таким образом, в приведенном выше вводе «B» является дочерним элементом «D», «D» является дочерним элементом «E» и т. Д.
Я пытаюсь создать словарь с кортежей (в отсортированном виде) как ключи и int как значения. Ожидается выход:
output = [(('A', 'B'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 3.0), (('D', 'E'), 4.5), (('D', 'G'), 0.5), (('E', 'F'), 1.5), (('F', 'G'), 0.5)]
В приведенном выше выходе, ключ кортеж, который представляет край на входе. Для ex: ('A', 'B') представляет собой ребро между A и B, а значение int - это то, что я вычисляю.
Я хотел бы знать, как это можно сделать.
Я попытался следующие:
1)
edges = []
for node,parents in input.items():
for p in sorted(parents):
tup = (node,p)
tup = sorted(tup)
edges.append(tup)
/*output of the above line: [['E', 'F'], ['D', 'E'], ['A', 'B'], ['B', 'C'], ['B', 'D'], ['D', 'G'], ['F', 'G']]*/
И тогда я думал, что я буду тянуть значения из этого списка в Словаре. Очевидно, я получил диктатор с ключ типа Список, а также не отсортированы.
2)
edges = {}
for node,parents in node2parents.items():
for p in sorted(parents):
t = (node,p)
t = sorted(t)
edges[t] = 0
Исполняя выше, я получил TypeError: unhashable типа: 'список'
Я попробовал несколько других способов, но ни один не оказался успешным. Было бы здорово, если бы кто-то помог мне узнать, как я могу это сделать.
PS: Я бы опубликовал доказательства более «неудачных» моих усилий, но я хочу тратить ваше время, заставляя вас пройти через все глупые способы, которые я пытался достичь своих целей. Кроме того, я googled и попытался, если бы мог найти ответ на мой вопрос. Хотя было множество возможных решений, я все еще не смог успешно реализовать логику. Я честно пытаюсь изучить Python, и было бы здорово, если бы вы могли подтолкнуть меня в правильном направлении.
'sorted' всегда возвращает список, даже если вы передадите ему кортеж. – user2357112
Примечание: ни один из литералов, которые вы указали, не является словарями, все они являются списками. – AChampion
Да, мой плохой! То, как я сформулировал вопрос, вводит в заблуждение. Извинения за ошибку. –