[Python] Defaultdict에서 sorted 함수의 활용

da__ell·2022년 10월 12일
1

python

목록 보기
4/6
post-thumbnail

알고리즘 문제를 풀다가 다음과 같은 상황이 있었다.

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를 활용할 수 있을 것으로 보인다.

profile
daelkdev@gmail.com

0개의 댓글