알고리즘 문제를 풀다가 다음과 같은 상황이 있었다.
graph = defaultdict(list)
for _ in range(m):
sv, ev, weight = map(int, input().split())
graph[sv].append((ev, weight))
# input #
8
5 1 2
5 2 2
7 5 2
6 5 2
6 3 3
6 4 4
7 6 3
7 4 5
위와 같이 입력했을 경우 다음과 같이 출력 결과가 나온다.
defaultdict(<class 'list'>,
{5: [(1, 2), (2, 2)], 7: [(5, 2), (6, 3), (4, 5)], 6: [(5, 2), (3, 3), (4, 4)]})
key의 값 순서대로 정렬을 하고 싶어서 sorted 함수를 활용하여 정렬을 했더니 다음과 같이 출력이 되었다.
graph = defaultdict(list)
parts_num = {i: 0 for i in range(1, n+1)}
for _ in range(m):
sv, ev, weight = map(int, input().split())
graph[sv].append((ev, weight))
graph = sorted(graph)
## 출력 결과 ##
[5, 6, 7]
왜 이렇게 나온 걸까 해서 dictionary형태에서 sorted 메소드가 어떻게 작용했는지 찾아봤다.
다음과 같이 정리할 수 있겠다
**1. sorted(dict)을 하게 되면 해당 dict의 키 값만 가져와서 정렬해준다.
(그래서 위와 같이 key값인 5, 6, 7만 가져와서 정렬을 해준 것이다)2. 내가 의도한던대로 key를 기준으로 dict을 정렬하고 출력도 dict형태를 유지하고 싶다면. 먼저 list[tuple] 형태로 정렬을 시키고 다시 dict메소드를 활용하여 딕셔너리로 변형시키면 된다.
main_parts = sorted(graph.items())
### sorted(dict.items())메소드를 실행하면 리스트 안의 튜플 형식으로 변환됨
[(5, [(1, 2), (2, 2)]), (6, [(5, 2), (3, 3), (4, 4)]), (7, [(5, 2), (6, 3), (4, 5)])]
###
main_parts = dict(sorted(graph.items()))
{5: [(1, 2), (2, 2)], 6: [(5, 2), (3, 3), (4, 4)], 7: [(5, 2), (6, 3), (4, 5)]}
sorted 메소드를 활용하면 다양한 방식으로 key와 value를 활용할 수 있을 것으로 보인다.