저는 파이썬에 대해 매우 익숙하며 파이썬을 배우기 위해 최선을 다하고 있습니다. 나는 내가 발견 한 커뮤니티 탐지 알고리즘을 구현하려고 노력해 왔으며 여기서 누군가의 도움을 얻을 수 있다면 정말로 감사 할 것입니다.사전으로 정렬 된 튜플을 키로 추가하기
나는 defaultdict (목록)가은 아래와 같다 내 입력 :
여기input = [('B', ['D']), ('D', ['E']), ('F', ['E']), ('G', ['D', 'F'])]
, 'B', 'D'를, 'E' 등 나무에 노드를 나타냅니다. 사전의 키은 개의 자식 노드을 나타내고 값은 부모 노드를 나타냅니다. 그래서 위의 입력에서 'B'는 'D'의 자식이고 'D'는 'E'의 자식입니다.
과 같은 사전을 만들려고 시도합니다. (정렬 된 순서대로) 키 및 은 값이입니다. 예상 출력은 다음과 같습니다.
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)]
위의 출력에서 키는 입력의 가장자리를 나타내는 튜플입니다. 예 : ('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']]*/
을 그리고 나는 내가 DICT이 목록에서 값을 가져옵니다 생각했다. 분명히 목록의 목록을 가지고 있으며 목록의 항목은 정렬되지 않았습니다. unhashable 유형 :
2)
edges = {}
for node,parents in node2parents.items():
for p in sorted(parents):
t = (node,p)
t = sorted(t)
edges[t] = 0
위를 실행에, 나는 형식 오류를 가지고 '목록'나는 몇 가지 다른 방법을 시도
,하지만 아무도 성공을 입증하지 않습니다. 누군가가 나를 어떻게 할 수 있는지 배우는 것을 도울 수 있다면 좋을 것입니다.
추신 : 내 "실패한"노력에 대한 증거를 게시했지만, 내 목표를 달성하기 위해 노력한 모든 어리석은 길을 지나가도록하여 시간을 낭비하고 싶습니다. 또한, 나는 내 질문에 대한 답변을 찾을 수 있다면 googled 및 시도. 무수한 솔루션이 있었지만, 나는 여전히 로직을 성공적으로 구현하지 못했습니다. 나는 정직하게 파이썬을 배우려고 노력하고 있으며 올바른 방향으로 나를 밀어 붙일 수 있다면 좋을 것입니다.
'sorted'는 튜플을 건네 주더라도 항상 목록을 반환합니다. – user2357112
참고 : 표시된 리터럴 중 어느 것도 사전이 아니며 모든 목록입니다. – AChampion
예! 내 잘못입니다. 질문을 골랐던 방식은 오해의 소지가 있습니다. 오류에 대해 사과드립니다. –