[Python] 중첩 딕셔너리 - dict in dict

해질녘·2022년 2월 22일
0

[Python] 중첩 딕셔너리 - dict in dict

예시

graph = {
    'A': {'B': 8, 'C': 1, 'D': 2},
    'B': {},
    'C': {'B': 5, 'D': 2},
    'D': {'E': 3, 'F': 5},
    'E': {'F': 1},
    'F': {'A': 5}
}

파이썬으로 다익스트라 알고리즘을 구현하는 코드를 봤는데, 딕셔너리를 중첩해서 쓰고 있다.

여기서는 미리 그래프를 작성해두었지만, 알고리즘 문제를 풀다 보면 그래프를 입력 받아야 하는 경우가 많다.

그 경우에 입력 받는 법이 헷갈려서 작성한다.

중첩 딕셔너리 초기화

{0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}}

key 값을 range(0, n)으로 하는 중첩 딕셔너리이다. 생성하는 코드는 다음과 같다.

graph = {}
for i in range(n+1):
    graph[i] = {}

중첩 딕셔너리에 값 추가

{0: {}, 1: {2: 2, 3: 3, 4: 1, 5: 10}, 2: {4: 2}, 3: {4: 1, 5: 1}, 4: {5: 3}}

위에서 초기화한 딕셔너리를 이렇게 대입해주려고 한다. 다익스트라 알고리즘에서 시작한 게시물 이므로 한 줄에 주어지는 입력은 다음과 같다.

  • start, end, cost

start는 바깥 dict의 key가 될 녀석. end는 안쪽 dict의 key가 되고, cost가 안쪽 dict의 value가 된다.

for _ in range(m):
    start, end, cost = map(int, input().split())
    graph[start][end] = cost

위 코드에서는 한줄씩 입력을 받으며 딕셔너리에 추가했다.

다차원 배열과 비슷하게 생각하되, 인덱스 값이 range(0, n)이 아니라 key 이다. 이렇게 나름대로 정리해보았다. ㅎㅎ

참고

0개의 댓글