Original article: Create a Dictionary in Python – Python Dict Methods
이 기사에서는 Python의 딕셔너리(Dictionary) 자료형의 기본 사용법을 알아보겠습니다.
딕셔너리 생성하기, 딕셔너리 내의 요소에 접근하기, 그리고 필요에 따라 딕셔너리의 요소를 수정하는 방법에 대해 살펴보겠습니다.
또한 흔히 사용하는 딕셔너리 내장 메서드에 대해서도 설명하겠습니다.
이 기사에서 다룰 내용은 다음과 같습니다.
- 딕셔너리 생성 및 선언하기
- 키(key)-값(value)란 무엇인가
- 딕셔너리의 특정 키-값에 접근하기
- 딕셔너리 수정하기
1.딕셔너리에 새 키-값 추가하기
2. 딕셔너리의 기존 키-값 수정하기
3. 키-값 삭제하기
그럼 시작해볼까요?
딕셔너리 생성 및 선언하기
Python의 딕셔너리는 키와 값으로 이루어진 자료형입니다.
다음 두 섹션을 통해 딕셔너리를 생성하는 두 가지 방법을 보여드리겠습니다.
첫 번째 방법은 중괄호 {}
를 사용하는 것이고 두 번째 방법은 내장 함수 dict()
를 사용하는 것입니다.
빈 딕셔너리 선언하기
빈 딕셔너리를 선언하려면 먼저 딕셔너리의 이름이 될 변수 이름을 생성합니다.
그런 다음 생성한 변수를 빈 중괄호 {}
에 할당합니다.
#빈 딕셔너리 선언하기
my_dictionary = {}
print(my_dictionary)
#type() 함수를 통해 자료형을 확인하기
print(type(my_dictionary))
#출력된 결과
#{}
#<class 'dict'>
빈 딕셔너리를 생성하는 또 다른 방법은 인수를 전달하지 않고 dict()
함수를 사용하는 것입니다.
인수를 전달하지 않은 dict()
는 생성자 함수 역할을 해 빈 딕셔너리를 만듭니다.
#빈 딕셔너리 선언하기
my_dictionary = dict()
print(my_dictionary)
#type() 함수를 통해 자료형을 확인하기
print(type(my_dictionary))
#출력된 결과
#{}
#<class 'dict'>
요소가 포함된 딕셔너리 선언하기
요소가 포함된 딕셔너리를 만들려면 중괄호 {}
안에 키-값을 포함해야 합니다.
기본 문법은 다음과 같습니다.
dictionary_name = {키: 값}
더 자세히 설명하겠습니다.
-dictionary_name
은 변수의 이름입니다. 즉, 이 예시에서는 딕셔너리의 이름입니다.
- 할당 연산자
=
는키-값
을딕셔너리_이름
에 할당합니다. - 중괄호
{}
를 사용해 딕셔너리를 선언합니다. - 중괄호 안에 키-값이 있습니다. 키와 값은 쌍점
:
으로 구분합니다.
예시를 통해 요소가 포함된 딕셔너리 선언하기를 확인해봅시다.
#딕셔너리 선언하기
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
print(my_information)
#자료형 확인하기
print(type(my_information))
#출력된 결과
#{'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
#<class 'dict'>
위 예제에서는 중괄호 내에 일련의 요소가 있습니다. 정확히 말하자면, 다음과 같은 세 개의 키-값이 있습니다: 'name': 'Boyeon'
, 'age': 29
, and 'location': 'Seoul'
.
주어진 예시의 딕셔너리에 포함된 세 키는 name
, age
, 그리고 location
이며, 각 키에 할당된 값은 Boyeon
, 29
, 그리고 Seoul
입니다.
딕셔너리에 여러 개의 키-값이 있을 경우 각 키-값은 쉼표로 구분합니다.
또 다른 예시를 봅시다.
이번에는 dict()
함수를 사용해 요소가 포함된 딕셔너리를 생성해야 한다고 가정해보겠습니다.
방법은 간단합니다. dict()
를 사용해 일련의 키-값을 함수에 대한 인수로 전달하면 됩니다.
#dict() 함수를 사용해 딕셔너리 생성하기
my_information = dict({'name': 'Boyeon', 'age': 29, 'location': 'Seoul'})
print(my_information)
#자료형 확인하기
print(type(my_information))
#출력된 결과
#{'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
#<class 'dict'>
딕셔너리를 만드는 또 다른 방법은 바로 fromkeys()
메서드를 사용하는 것입니다.
미리 정의된 일련의 요소를 인수로 전달 받고 일련의 요소를 딕셔너리의 지정된 키로 사용해 새 딕셔너리를 반환합니다.
사용자가 선택 사항으로 모든 키에 대한 값을 설정할 수 있지만, 설정하지 않는다면 기본적으로 키의 값은 None
이 됩니다.
fromkeys()
메서드의 기본 문법은 다음과 같습니다.
딕셔너리_이름 = dict.fromkeys(sequence,value)
모든 키에 값을 설정하지 않고 fromkeys()
를 사용해 딕셔너리를 만드는 예를 살펴봅시다.
#일련의 문자열 생성하기
cities = ('Paris','Athens', 'Madrid')
#fromkeys() 메서드를 사용해 `my_dictionary`라는 딕셔너리 생성하기
my_dictionary = dict.fromkeys(cities)
print(my_dictionary)
#{'Paris': None, 'Athens': None, 'Madrid': None}
이제 딕셔너리의 모든 키에 동일한 값을 설정하는 다른 예를 보여드리겠습니다.
#일련의 문자열 생성하기
cities = ('Paris','Athens', 'Madrid')
#단일 값을 생성하기
continent = 'Europe'
my_dictionary = dict.fromkeys(cities,continent)
print(my_dictionary)
#출력된 결과
#{'Paris': 'Europe', 'Athens': 'Europe', 'Madrid': 'Europe'}
키(key)-값(value)란 무엇인가
Python 딕셔너리 내의 키는 수정 불가능한(immutable) 타입일 수도 있습니다.
Python에서 수정 불가능한 데이터 타입은 정수(integers)
, 문자열(strings)
, 튜플(tuples)
, 실수형(floating point numbers)
, 그리고 불린 자료형(Booleans)
입니다.
딕셔너리의 키는 집합 자료형(sets)
, 리스트(lists)
, 또는 딕셔너리(dictionaries)
와 같은 수정 가능한(mutable) 데이터 타입일 수 없습니다.
다음과 같은 딕셔너리가 있다고 가정해보겠습니다.
my_dictionary = {True: "True", 1: 1, 1.1: 1.1, "one": 1, "languages": ["Python"]}
print(my_dictionary)
#출력된 결과
#{True: 1, 1.1: 1.1, 'one': 1, 'languages': ['Python']}
위의 예시에 있는 딕셔너리의 키는 불린
, 정수
, 실수형
, 그리고 자료형
데이터 타입으로 모두 키로 사용 가능합니다.
수정 가능한 데이터 타입의 키를 생성하려고 하면 TypeError
오류가 발생합니다.
my_dictionary = {["Python"]: "languages"}
print(my_dictionary)
#출력된 결과
#line 1, in <module>
# my_dictionary = {["Python"]: "languages"}
#TypeError: unhashable type: 'list'
위에 예에서 수정 가능한 데이터 타입인 리스트
를 키로 지정하려고 했기 때문에 TypeError: unhashable type: 'list'
오류가 발생했다는 것을 확인할 수 있습니다.
반면, 딕셔너리 내의 값(value)에는 데이터 타입에 관한 제한이 없습니다. 즉, 수정 가능한 데이터와 수정 불가능한 데이터 타입을 값으로 사용할 수 있습니다.
주목해야 할 키와 값의 또 다른 차이점은 키는 고유하다는 점입니다. 다시 말해 한 딕셔너리에 같은 이름의 키는 한 개 이상 존재할 수 없습니다. 하지만 딕셔너리 내에 동일한 값은 중복될 수 있습니다.
(더 명확한 설명을 위해 예시를 들어보겠습니다 --옮긴이)
#이렇게 딕셔너리에 `name` 키가 두 번 있을 수 없습니다
my_dictionary = {'name': 'Boyeon', 'name': 'Ihn'}
#하지만 딕셔너리에 `Seoul`이라는 값은 중복될 수 있습니다
my_information = {'birthplace': 'Seoul', 'current_location': 'Seoul'}
딕셔너리의 키-값(key-value) 개수 확인하기
len()
함수는 인수로 전달된 객체의 총 길이를 반환합니다.
딕셔너리가 len()
함수에 인수로 전달되면, 딕셔너리에 포함된 키-값의 총 개수를 반환합니다.
len()
을 사용해 키-값의 수를 계산하는 방법은 다음과 같습니다.
my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
print(len(my_information))
#출력된 결과
#3
주어진 딕셔너리의 모든 키-값 보기
딕셔너리에 있는 모든 키-값을 보려면 items()
내장 함수를 사용합니다.
year_of_creation = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}
print(year_of_creation.items())
#출력된 결과
#dict_items([('Python', 1993), ('JavaScript', 1995), ('HTML', 1993)])
items()
메서드는 딕셔너리의 키-값을 포함하는 튜플 목록을 반환합니다.
딕셔너리의 모든 키(key) 보기
딕셔너리에 있는 모든 키를 확인하려면 keys()
내장 메서드를 사용합니다.
year_of_creation = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}
print(year_of_creation.keys())
#출력된 결과
#dict_keys(['Python', 'JavaScript', 'HTML'])
keys()
메서드는 딕셔너리에 있는 키만 포함하는 리스트를 반환합니다.
딕셔너리의 모든 값(values) 보기
딕셔너리에 있는 모든 값을 확인하려면 values()
내장 메서드를 사용합니다.
year_of_creation = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}
print(year_of_creation.values())
#출력된 결과
#dict_values([1993, 1995, 1993])
values()
메서드는 딕셔너리에 있는 값만 포함하는 리스트를 반환합니다.
딕셔너리의 특정 키-값에 접근하기
Python에서는 기존 리스트 내의 특정 요소를 접근해야 할 때, 일반적으로 리스트 이름과 대괄호 표기법을 사용합니다. 대괄호 안에는 리스트 항목의 인덱스 번호를 지정합니다. 이렇게요.
(명확한 설명을 위해 예시를 추가합니다 --옮긴이)
#기존 리스트
my_list = [1993, 1995, 2022]
#대괄호와 인덱스 번호를 사용해 첫 번째 요소 접근하기
first_element = my_list[0]
print(first_element)
#출력된 결과
# 1993
딕셔너리에서는 리스트와 완전히 동일한 방법을 사용할 수 없습니다.딕셔너리는 키-값으로 이루어진 데이터 타입이기 때문에 인덱스 번호를 사용해 딕셔너리 내의 요소를 접근할 수 없기 때문입니다.
딕셔너리의 이름과 대괄호 표기법을 사용해 특정 요소에 접근한다는 점은 리스트와 비슷하지만, 딕셔너리는 이 대괄호 안에 접근하고 싶은 키를 지정합니다.
각 키는 특정 값에 해당하므로 접근하고 싶은 값과 지정된 키를 참조합니다.
특정 키-값에 접근하는 기본 문법은 다음과 같습니다.
dictionary_name[key]
Python 딕셔너리에서 특정 요소에 액세스하는 방법을 예시를 통해 살펴봅시다.
my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#'age' 키에 할당된 값 접근하기
print(my_information['age'])
#출력된 결과
#28
주어진 딕셔너리에 존재하지 않는 키에 접근하려고 하면 어떻게 될까요?
my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#존재하지 않는 'job' 키에 할당된 값 접근하기
print(my_information['job'])
#출력된 결과
#line 4, in <module>
# print(my_information['job'])
#KeyError: 'job'
딕셔너리에 그런 키는 존재하지 않기 때문에 KeyError
오류가 발생합니다.
이와 같은 오류를 방지하는 한 가지 방법은 먼저 딕셔너리에 그 특정 키가 있는지 확인하는 것입니다.
바로 불린 값을 반환하는 in
키워드를 사용하면 됩니다. 키가 딕셔너리에 있으면 True
를, 딕셔러니에 없으면 False
를 반환합니다.
my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#search for the 'job' key
print('job' in my_information)
#출력된 결과
#False
KeyError
오류를 방지하려면 get()
메서드를 사용해 딕셔너리의 항목에 접근하는 방법도 있습니다.
찾으려는 키를 인수로 전달하면 get()
함수는 전달된 키에 해당하는 값을 반환합니다.
my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#get() 메서드를 통해 'job' 키에 접근하기
print(my_information.get('job'))
#출력된 결과
#None
예시에 보인 것처럼, 존재하지 않는 키를 접근하려고 하면 get()
메서드는 기본적으로 KeyError
오류 대신 None
을 반환합니다.
get()
함수에 인수로 전달된 키가 딕셔너리에 없을 때 None
이라는 메시지 대신 다른 메시지가 반환되도록 get()
함수를 사용자 정의할 수 있습니다.
키가 없을 때 표시되고 싶은 메시지를 get()
메서드의 두 번째 옵션 인수로 전달하면 됩니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
#get() 메서드를 통해 'job' 키에 접근하기
print(my_information.get('job', '이 값은 존재하지 않습니다'))
#출력된 결과
#이 값은 존재하지 않습니다
이제 딕셔너리에 없는 키를 접근하려고 하면 이 값은 존재하지 않습니다
라는 메시지가 콘솔에 출력됩니다.
딕셔너리 수정하기
딕셔너리는 "mutable," 즉, 수정 가능한 데이터 타입이기 때문에 내용을 변경할 수 있습니다.
프로그램이 실행되는 동안에도 딕셔너리는 규모가 커질 수도, 축소할 수도 있고, 새 항목이 추가되거나, 기존 항목이 새 값으로 수정되거나, 삭제될 수도 있습니다.
딕셔너리에 새 키-값 추가하기
딕셔너리에 키-값 쌍을 추가하려면 대괄호 표기법을 사용합니다.
새 키-값을 추가하는 기본 문법은 다음과 같습니다.
dictionary_name[key] = value
먼저 새 키-값을 추가하고 싶은 딕셔너리의 이름을 지정합니다. 그런 다음 대괄호 안에 추가하고 싶은 키의 이름을 넣고, 키에 값을 할당합니다.
빈 딕셔너리로 시작한다고 가정해봅시다.
my_dictionary = {}
print(my_dictionary)
#출력된 결과
#{}
이제 my_dictionary
딕셔너리에 키-값을 추가해보겠습니다.
my_dictionary = {}
#빈 딕셔너리에 키-값 추가하기
my_dictionary['name'] = "Boyeon Ihn"
#딕셔너리 출력하기
print(my_list)
#출력된 결과
#{'name': 'Boyeon Ihn'}
다른 새 키-값을 추가하려면 대괄호 표기법을 동일하게 사용하면 됩니다.
my_dictionary = {}
#빈 딕셔너리에 키-값 추가하기
my_dictionary['name'] = "Boyeon Ihn"
#키-값 또 추가하기
my_dictionary['age'] = 29
#딕셔너리 출력하기
print(my_dictionary)
#출력된 결과
#{'name': 'Boyeon Ihn', 'age': 29}
추가하려는 키가 해당 사전에 이미 있고 다른 값을 할당하는 경우, 기존에 있는 키의 값만 업데이트될 뿐, 새 키-값이 추가되지 않습니다.
키는 고유해야 한다는 점, 꼭 명심하시길 바랍니다.
my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
print(my_dictionary)
#'age' 키를 새로 생성하고 값을 할당하려고 시도해봅니다
#하지만 'age' 키는 이미 딕셔너리에 존재한 상황입니다.
my_dictionary['age'] = 46
#이런 경우, 존재하고 있는 'age'의 값이 29에서 46로 업데이트 될 뿐, 새 키-값이 추가되지 않습니다
print(my_dictionary)
#출력된 결과
#{'name': 'Boyeon Ihn', 'age': 29}
#{'name': 'Boyeon Ihn', 'age': 46}
실수로 이미 존재하는 키에 할당된 값을 변경하지 않으려면, 추가하려는 키가 딕셔너리에 이미 있는지 확인하는 게 좋습니다.
이전 섹션에 설명한대로 in
키워드를 이때 유용하게 사용할 수 있습니다.
my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
#'age' 키를 추가하려고 합니다. 추가하기 전에, 'age' 키가 이미 있는지 확인해봅시다.
print('age' in my_dictionary)
#출력된 결과
#True
딕셔너리의 기존 키-값 수정하기
딕셔너리의 키-값 요소를 업데이트 및 수정하는 방법은 딕셔너리에 키-값을 새로 추가하는 방법과 유사합니다.
기존 키의 값을 수정하는 경우 이전 섹션에서 본 것처럼 다음과 같은 기본 문법을 사용합니다.
dictionary_name[existing_key] = new_value
my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
my_dictionary['age'] = 46
print(my_dictionary)
#출력된 결과
#{'name': 'Boyeon Ihn', 'age': 29}
딕셔너리의 내용을 수정하려면 update()
내장 메서드를 사용해도 됩니다.
이 메서드는 딕셔너리에서 두 개 이상의 키-값을 동시에 업데이트하려는 경우 특히 유용합니다.
my_dictionary에서 name
과 age
키의 값을 수정하고 새 키 occupation
을 추가한다고 가정합시다.
my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
my_dictionary.update(name= 'Mike Green', age = 46, occupation = "software developer")
print(my_dictionary)
#출력된 결과
#{'name': 'Mike Green', 'age': 46, 'occupation': 'software developer'}
update()
메서드는 키-값의 튜플을 인수로 전달 받습니다.
딕셔너리에 이미 존재하는 키는 새 값이 할당되었고, 새 키-값이 추가되었습니다.
update()
메서드는 한 딕셔너리의 내용을 다른 딕셔너리에 추가하려는 경우에도 유용합니다.
numbers
딕셔너리가 있고, more_numbers
라는 또 다른 딕셔너리가 있다고 가정해봅시다.
more_numbers
내의 내용물을 numbers
와 병합하려면 update()
메서드를 사용해야 합니다.
more_numbers
에 포함된 모든 키-값은 numbers
딕셔너리의 끝에 추가됩니다.
numbers = {'one': 1, 'two': 2, 'three': 3}
more_numbers = {'four': 4, 'five': 5, 'six': 6}
#'numbers' 딕셔너리 업데이트하기
#`more_numbers' 딕셔너리의 요소들을 기존 딕셔너리에 추가합니다
numbers.update(more_numbers)
print(numbers)
#출력된 결과
#{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
딕셔너리의 키-값 삭제하기
딕셔너리에서 특정 키 및 관련 값을 삭제하는 방법 중 하나는 del
키워드를 사용하는 것입니다.
키-값을 삭제하는 기본 문법은 다음과 같습니다.
del dictionary_name[key]
다음 예시를 통해 my_information dictionary
딕셔너리에서 location
키를 삭제해보겠습니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
del my_information['location']
print(my_information)
#출력된 결과
#{'name': 'Boyeon', 'age': 29}
del
키워드를 사용하면 키와 값 둘 다 삭제된다는 것을 확인하셨나요? 키를 삭제하고 같이 제거되는 값을 따로 저장하려면 pop()
내장 메서드를 사용합니다.
pop()
메서드는 지정한 키를 제거하지만 할당된 값을 반환합니다. 나중에 사용하거나 접근할 수 있도록 제거된 값을 변수에 저장할 수 있습니다.
pop()
메서드를 사용하는 기본 문법은 다음과 같습니다. 함수에 삭제하려는 키를 인수로 전달해야 한다는 것을 확인할 수 있습니다.
dictionary_name.pop(key)
위 예시처럼 location
키를 삭제를 하지만, 동시에 키에 할당된 값은 따로 저장하고 싶다면 다음과 같이 pop()
메서드를 사용하면 됩니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
city = my_information.pop('location')
print(my_information)
print(city)
#출력된 결과
#{'name': 'Boyeon', 'age': 29}
#Seoul
pop()
메서드에 딕셔너리에 존재하지 않는 키를 인수로 전달한다면, KeyError
오류 메시지가 나타납니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
my_information.pop('occupation')
print(my_information)
#출력된 결과
#line 3, in <module>
# my_information.pop('occupation')
#KeyError: 'occupation'
KeyError
오류를 방지하는 방법은 pop()
메서드에 두 번째 인수를 전달하는 것입니다.
두 번째 인수를 전달하면 위의 오류는 발생하지 않습니다. 대신, 첫 번째 인수로 전달된 키가 딕셔너리에 존재하지 않으면 pop()
는 silent fail(조용한 에러)만 발생할 뿐 딕셔너리 자체는 바뀌지 않습니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
my_information.pop('occupation','Not found')
print(my_information)
#출력된 결과
#{'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
pop()
메서드는 특정 키와 관련 값을 제거합니다. 하지만 딕셔너리의 마지막 키-값만 삭제하려면 어떻게 해야 할까요?
이런 경우 내장 메서드인 popitem()
을 사용하세요.
다음 코드가 popitem()
의 기본 문법입니다.
dictionary_name.popitem()
popitem()
메서드는 인수를 사용하지 않고 딕셔너리의 마지막 키-값이 제거된 딕셔너리를 반환합니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
popped_item = my_information.popitem()
print(my_information)
print(popped_item)
#출력된 결과
#{'name': 'Boyeon', 'age': 29}
#('location', 'Seoul')
마지막으로, 딕셔너리에 포함된 모든 키-값을 삭제하려면 clear()
내장 메서드를 사용할 수 있습니다.
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
my_information.clear()
print(my_information)
#출력된 결과
#{}
이 메서드를 사용하면 기존 딕셔너리가 비어지는 것을 확인할 수 있습니다.
마치며
이렇게 딕셔너리 자료형과 자주 사용하는 메서드에 대해 배워봤습니다. 긴 글을 읽느라 수고하셨습니다!
이 기사가 도움이 되었길 바랍니다.
Python에 대해 더 배워보고 싶다면 freeCodeCamp의 Python 수료증 과정을 확인해보세요. 수료증 강의를 통해 초보자여도 Python을 재미있고 유익하게 배우면서 5개의 프로젝트를 해보며 배운 것을 열심히 실습할 수 있을 거에요.
읽어주셔서 감사합니다. Happy coding!