변수와 자료형의 마지막인 딕셔너리에 대해 알아보도록 하겠습니다.
딕셔너리
딕셔너리란 우리말로 사전입니다. 딕셔너리르 설명하기 전에 먼저 사전을 생각해봅시다. 사전의 구성을 보면 표제어가 있고 그에 대한 설명이 있습니다. 따라서 표제어만 찾으면 그에 대한 설명을 전부 확인할 수 있습니다.
파이썬의 딕셔너리도 사전과 유사하게 구성돼 있습니다. 사전의 표제어와 설명은 파이썬에서 각각 키(key)와 값(value)이라고 합니다. 이처럼 딕셔너리는 키와 값이 항상 쌍으로 구성됩니다. 따라서 키를 안다면 그에 해당하는 값을 쉽게 알 수 있습니다. 리스트나 튜플은 인덱스를 이용해 항목을 다뤘지만 딕셔너리는 인덱스 대신 키를 이용해 값을 다룹니다. 리스트나 튜플에서 인덱스는 0부터 시작하는 숫자였지만 딕셔너리의 키는 임의로 지정한 숫자나 문자열이 될 수 있으며, 값으로는 어떤 데이터 타입도 사용할 수 있습니다. 설명만으로는 복잡해 보이지만 실제로 딕셔너리를 만들고 활용해 보면 그다지 어렵지 않습니다.
딕셔너리 만들기
딕셔너리를 만들려면 데이터 전체를 중괄호 ({ })로 감싸면 됩니다. 그리고 키와 값의 구분은 콜론(:)으로 합니다. 또한 키와 값으로 이뤄진 각 쌍은 콤마(,)로 구분합니다.
그럼 에제를 통해 어떻게 딕셔너리를 생성하는지 알아보겠습니다. 먼저 키와 값이 모두 문자열인 예제를 살펴보겠습니다. 딕셔너리를 생성하기 위해 다음 코드처럼 키와 값으로 나라오 ㅏ수도를 입력하겠습니다.
In : country_capital = {"영국":"런던","프랑스":"파리","스위스":"베른","호주":"멜버른","덴마크":"코펜하겐"}
country_capital
Out : {'영국':'런던','프랑스':'파리','스위스':'베른','호주':'멜버른','덴마크':'코펜하겐'}
In : type(country_capital)
Out : dict
출력 결과를 보면 dict라고 나오는데, 이것은 딕셔너리를 의미합니다. 만약 지정한 키의 값만 얻고 싶으면 다음과 같이 딕셔너리 변수에 원하는 키를 넣으면 됩니다.
In : country_capital["영국"]
Out : '런던'
앞에서도 이야기했듯이 딕셔너리의 키는 숫자와 문자열이 될 수 있고 값은 어떤 데이터 형태도 올 수 있습니다. 다음은 키와 값에 다양한 데이터 타입을 입력한 예를 살펴보겠습니다. 우선 키는 숫자로, 값은 문자열로 입력한 예입니다.
In : dict_data1 = {1:"버스", 3:"비행기", 4:"택시", 5:"자전거"}
dict_data1
Out : {1:'버스', 3:'비행기', 4:'택시', 5:'자전거'}
위의 딕셔너리에서 키를 3으로 지정해 출력해 보겠습니다.
In : dict_data1[3]
Out : '비행기'
위 결과에서 딕셔너리 변수 dict_data1의 키 3에 해당하는 값인 '비행기'가 출력됐습니다. dict_data1[3]에서 입력된 3은 딕셔너리 키이지, 리스트의 인덱스처럼 위치를 뜻하는 3이 아닙니다.
다음은 키와 값이 모두 숫자인 딕셔너리의 예입니다.
In : dict_data2 = {1:10, 2:20, 3:30, 4:40, 5:50}
print(dict_data2)
print(dict_data2[4])
Out : {1:10, 2:20, 3:30, 4:40, 5:50}
40
다음은 키가 문자열이고 값은 리스트인 딕셔너리의 예입니다.
In : dict_data3 = {"list_data1":[11,12,13], "list_data2":[21,22,23]}
print(dict_data3)
print(dict_data3["list_data2"]
Out : {'list_data1':[11,12,13], 'list_data2':[21,22,23]}
[21,22,23]
앞의 예처럼 키에 사용할 수 있는 데이터 타입은 숫자나 문자열이지만 값에는 숫자, 문자열, 튜플, 리스트, 딕셔너리 등 다양한 데이터를 사용할 수 있습니다.
딕셔너리 다루기
-딕셔너리에 데이터 추가하고 변경하기
이번에는 딕셔너리를 처리하는 방법을 살펴보겠습니다. 생성된 딕셔너리에 새로운 키와 값을 추가하거나 기존의 값을 수정하려면 'dict_variable[key]=value'형태로 입력하면 됩니다.
다음은 앞에서 만든 딕셔너리 변수 country_capital에 독일의 수도인 베를린을 키와 값으로 새롭게 추가한 예입니다.
In : country_capital["독일"]="베를린"
country_capital
Out : {'영국':'런던','프랑스':'파리','스위스':'베른','호주':'멜버른','덴마크':'코펜하겐','독일':'베를린'}
기존 키의 값을 다른 값으로 변경하려면 다음과 같이 기존 키를 지정하고 새로운 값을 할당하면 됩니다. 위의 예제에서 호주의 수도는 캔버라인데 멜버른으로 잘못 입력됐으니 변경해 보겠습니다.
In : country_capital["호주"]="캔버라"
country_capital
Out : {'영국':'런던','프랑스':'파리','스위스':'베른','호주':'캔버라','덴마크':'코펜하겐','독일':'베를린'}
-딕셔너리에서 데이터 삭제하기
딕셔너리의 특정 키와 값을 삭제하려면 'del 딕셔너리데이터[key]'를 입력해 딕셔너리에서 키와 이와 쌍을 이루는 값을 삭제할 수 있습니다. 예를 들어, 딕셔너리 변수 country_capital에서 키가 '덴마크'이고 값이 '코펜하겐'인 데이터를 삭제하려면 다음과 같이 작성하면 됩니다.
In : del country_capital["덴마크"]
country_capital
Out : {'영국':'런던','프랑스':'파리','스위스':'베른','호주':'캔버라','독일':'베를린'}
-딕셔너리 메서드 활용하기
리스트의 경우 리스트 메서드를 이용해 여러 작업을 할 수 있었습니다. 딕셔너리의 경우도 딕셔너리 데이터를 처리하기 위한 딕셔너리 메서드가 있습니다. 딕셔너리 메서드는 '딕셔너리데이터.메서드이름()'과 같은 형태로 사용할 수 있습니다. 아래의 표는 딕셔너리에서 사용할 수 있는 메서드입니다.
딕셔너리 메서드 | 설명 | 사용 예 |
keys() | 딕셔너리에서 키 전체를 리스트 형태로 반환 | dict_data.keys() |
values() | 딕셔너리에서 값 전체를 리스트 형태로 반환 | dict_data.values() |
items() | 딕셔너리에서 키와 값의 쌍을 (키,값)처럼 튜플 형태로 반환 | dict_data.items() |
update(dict_data2) | 딕셔너리에 딕셔너리 데이터('dict_data2') 추가 | dict_data.update(dict_data2) |
clear() | 딕셔너리의 모든 항목 삭제 | dict_data.clear() |
위의 표에대한 예를 살펴보겠습니다. 딕셔너리 메서드의 사용법을 설명하기 위해 다음과 같이 과일 이름을 키로 하고 숫자를 값으로 하는 딕셔너리를 생성하겠습니다.
In : fruit_code = {"사과":101, "배":102, "딸기":103, "포도":104, "바나나":105}
이제, 딕셔너리 메서드 keys()를 이용해 딕셔너리에서 키만 출력하겠습니다.
In : print(fruit_code.keys())
Out : dict_keys(["사과", "배", "딸기", "포도", "바나나"])
다음으로 values()로 딕셔너리의 값을 출력하겠습니다.
In : print(fruit_code.values())
Out : dict_values([101,102,103,104,105])
다음으로 items()로 키와 값의 쌍을 출력해 보겠습니다.
In : print(fruit_code.items())
Out : dict_items([('사과',101), ('배',102), ('딸기',103), ('포도',104), ('바나나',105)])
출력 결과에서 딕셔너리 메서드인 keys(), values(), items()는 각각 dict_keys, dict_values, dict_items라는 데이터 형태로 값을 반환합니다. 딕셔너리는 리스트로 변환해서 데이터를 처리하면 편리한 경우가 있습니다. 이때 list() 함수를 이용해 리스트로 변활할 수 있습니다.
In : list(fruit_code.keys())
Out : ['사과','배','딸기','포도','바나나']
다음으로 update()를 이용해 기존의 딕셔너리 데이터에 새로운 딕셔너리 데이터를 추가하겠습니다. 예를 살펴보기 위해서는 두 개의 딕셔너리 데이터가 필요하므로 딕셔너리를 하나 더 생성하겠습니다.
In : fruit_code2 = {"오렌지":106, "수박":107}
이제 update.() 메서드를 이용해 딕셔너리 fruti_code에 fruit_code2를 추가하겠습니다.
In : fruit_code.update(fruit_code2)
fruit_code
Out : {'사과': 101, '배': 102, '딸기': 103, '포도': 104, '바나나': 105, '오렌지': 106, '수박': 107}
위의 결과에서 딕셔너리 fruit_code에 fruit_code2의 키와 값이 추가된 것을 볼 수 있습니다. clear()메서드는 다음과 같이 딕셔너리의 모든 항목을 삭제합니다.
In : fruit_code2.clear()
print(fruit_code2)
type(fruit_code2)
Out : {}
Out : dict
출력 결과를 보면 딕셔너리 fruit_code2의 모든 항목을 clear() 메서드로 삭제해 빈 딕셔너리({ })가 됐지만 데이터 타입은 여전히 딕셔너리(dict)임을 알 수 있습니다.
출처 : 데이터분석을 위한 파이썬 철저 입문 中