파이썬 딕셔너리 초기화와 함수

GOTAEUK·2022년 2월 12일
0
post-thumbnail

키와 값이 매핑되어 키를 통해 값에 접근할 수 있는 자료형태를 딕셔너리라고 한다. 이 글에서는 코딩 테스트 해시에서 사용되는 기본적인 딕셔너리 초기화와 함수에 대해 알아보고자 한다.


초기화

1. 기본

dict_a={"name":"홍길동","age":16}

위의 코드 처럼 값을 일일히 지정함으로 초기화를 할 수 있다.

2. defaultdict

딕셔너리를 초기화하는 다른 방법은 collections.defaultdict를 사용하는 것이다. 위의 방식으로 딕셔너리를 생성하는 것과 달리 값에 대한 기본 값을 설정함으로 번거로움을 일부 덜 수 있다.

from collections import defaultdict

dict_a=defaultdict(list)
dict_a["key"]

print(dict_a)
# 결과: defaultdict(<class 'list'>, {'key': []})

기본 딕셔너리에서 존재하지 않는 키를 사용하면 KeyError를 발생시키지만 defaultdict를 사용하면 KeyError가 발생하지 않는다. 다만 아래 코드와 같이 default를 설정하지 않은 상황에서 존재하지 않는 키에 접근한다면 keyError가 발생한다. 아래 코드는 default값을 설정하지 않고, 특정 키의 값을 설정한 코드이다.

from collections import defaultdict

dict_a = defaultdict(key_a=1, key_b=2)

print(dict_a)
# 결과: defaultdict(None, {'key_a': 1, 'key_b': 2})
print(dict_a["key_c"])
# 결과: KeyError

함수

1. get

위에서 설명했듯이 파이썬의 딕셔너리에서 존재하지 않는 키의 값을 가져오려 한다면 KeyError가 발생한다. 만약 키가 이미 존재하는지 확인하고 싶다면 in을 사용하는 방법이 있다.

dict_a={"name":"홍길동","age":16}
if "name" in dict_a:
	print(dict_a["name"])

# 결과: 홍길동

다른 방법은 get()함수를 사용하는 것이다. get()함수는 딕셔너리에 키가 존재한다면 해당하는 값을 리턴한다. 그러나 존재하지 않는 키를 get()의 인자에 입력한다면 KeyError가 아닌 None을 리턴한다. 따라서 KeyError를 발생시키지 않으려면 in이나 get()을 이용해 키의 존재 여부를 파악하는 것이 좋다. 위에서 설명한 defaultdict를 사용하는 것도 KeyError를 발생시키지 않는 하나의 방법이 될 수 있겠다.
get()에 두번째 인자를 줄 수 있는데 이는 키 값이 없을 경우 반환되는 값이다.

dict_a = {"name": "홍길동", "age": 16}
print(dict_a.get("name")) # 결과: 홍길동
print(dict_a.get("phone")) # 결과: None

print(dict_a.get("phone", "010-1234-5678")) # 결과: 010-1234-5678

2. keys

keys()함수는 딕셔너리의 키 리스트를 만드는 함수이다.

dict_a = {"name": "홍길동", "age": 16,"sex":"남"}
print(dict_a.keys())

# 결과: dict_keys(['name', 'age', 'sex'])

keys 함수, values함수, items함수 사용시 각각 dict_keys, dict_values, dict_items 객체를 리턴하는데 이는 메모리 낭비를 줄이기 위함이다. append, sort 등의 함수를 사용하고 싶다면 list로 변환하면 된다.

3. values

values() 함수는 딕셔너리의 값 리스트를 만드는 함수이다.

dict_a = {"name": "홍길동", "age": 16, "sex": "남"}
print(dict_a.values())

# 결과: dict_values(['홍길동', 16, '남'])

4. itmes

items()함수는 key, value 쌍을 튜플로 묶은 값의 리스트를 만드는 함수이다.

dict_a = {"name": "홍길동", "age": 16, "sex": "남"}
print(dict_a.items())

print(list(dict_a.items()))

# 결과: dict_items([('name', '홍길동'), ('age', 16), ('sex', '남')])
# [('name', '홍길동'), ('age', 16), ('sex', '남')]

5.zip

사실 zip()함수는 두개의 리스트를 합쳐 zip객체를 만드는 함수이다. 이 zip 객체를 dict로 형변환 하면 두개의 리스트형으로 딕셔너리형을 만들 수 있게 된다. 딕셔너리를 만드는데 참고하면 좋을 것 같아 포함시킨 함수이다.

name = ["홍길동", "고길동"]
age = [16, 17]

print(dict(zip(name, age)))

# 결과: {'홍길동': 16, '고길동': 17}

출처 및 참고

profile
한걸음씩

0개의 댓글