😎 사전 기본 용법
: 리스트나 튜플이 시퀀스로 분류가 되듯이 사전은 매핑(mapping) 자료형으로 분류됩니다.
파이썬 3.6부터는 key에 대해 순서유지가 추가되었습니다.
1. 사전 생성하기
# 비어있는 물결괄호는 집합이 아니라 사전입니다.(집합은 set()을 통해 생성)
my_dict = {}
my_dict = dict()
# 모두 같은 내용을 담은 사전을 생성합니다.
my_dict1 = {"one": 1, "two": 2, "three": 3}
my_dict2 = dict({"three": 3, "one": 1, "two": 2})
my_dict3 = dict({"one": 1, "three": 3}, two=2)
my_dict4 = dict(one = 1, two = 2, three = 3)
# 튜플의 리스트
my_dict5 = dict([("two", 2), ("one", 1), ("three", 3)])
# zip을 응용
my_dict6 = dict(zip(["one", "two", "three"], [1, 2, 3]))
# 🤔zip은 서로 다른 두 리스트로부터 아이템들을 하나씩 순서대로 가져와서 튜플로 묶어줍니다.
# 🤔zip의 결과를 리스트로 만들면 튜플의 리스트가 됩니다.
list(zip(["one", "two", "three"], [1, 2, 3]))
# 출력---------------------------------------------------
# [('one', 1), ('two', 2), ('three', 3)]
# key가 중복되는 경우에는 마지막 하나만 남습니다.
my_dict = {
"캡틴" : "Captain",
"캡틴" : "아메리카",
}
# 출력---------------------------
# {'캡틴': '아메리카'}
# 튜플을 키로 사용 가능
my_dict = {
("캡틴아메리카", "아이언맨") : "시빌워",
}
# 출력----------------------------------------
# {('캡틴아메리카', '아이언맨'): '시빌워'}
# 🤔key에는 불변 객체만 사용할 수 있습니다.
# 🤔튜플 안에 가변 객체가 들어있으면 key로 사용할 수 없습니다.
# 🤔키가 변경되면 찾을 수 없기 때문입니다.
2. key와 value 다루기
alphabets = {"A": 65, "B": 66, "C": 67, "D": 68}
# key -> 리스트
list(alphabets)
# 출력-----------
# ['A', 'B', 'C', 'D']
# 🤔키만 남음
# len()과 in도 키를 기준으로 작동합니다.
len(alphabets), "A" in alphabets
# 출력-----------------------------
# (4, True)
# key와 value의 배열을 따로 만들고 싶다면?
list(alphabets.keys()), list(alphabets.values())
# 출력----------------------------------------------------
# (['A', 'B', 'C', 'D'], [65, 66, 67, 68])
# key 리스트와 value 리스트를 zip으로 묶으면?
key_list = list(alphabets.keys())
value_list = list(alphabets.values())
dict(zip(key_list, value_list))
# 출력-------------------------------------
# {'A': 65, 'B': 66, 'C': 67, 'D': 68}
# 🤔다시 dict가 된다!
# (key, value) 튜플의 리스트 만들기
list(alphabets.items())
# 출력---------------------
# [('A', 65), ('B', 66), ('C', 67), ('D', 68)]
# 반복문과 items() 콤비네이션
for letter in alphabets.items():
print(letter, type(letter))
# 출력------------------------------
# ('A', 65) <class 'tuple'>
# ('B', 66) <class 'tuple'>
# ('C', 67) <class 'tuple'>
# ('D', 68) <class 'tuple'>
# 🤔언패킹까지 겸비하면 천국!
for key, value in alphabets.items():
print(key, value)
# 출력---------------------------------
# A 65
# B 66
# C 67
# D 68
# 만약 정렬된 순서로 순하고 싶다면 sorted()를 사용할 수 있습니다.
alphabets = {"E": "Eating", "A": 65, "B": 66, "C": 67, "D": 68}
for k in sorted(alphabets):
print(f"{k} => {alphabets[k]}")
# 출력---------------------------------
# A => 65
# B => 66
# C => 67
# D => 68
# E => Eating
# 🤔sorted()는 리스트를 뱉어준다!
3. 사전 메써드
my_dict = {
"A": 65,
"B": 66,
"C": 67,
}
# 사전에 있는 값을 가져오기
my_dict.get("B")
my_dict.get("B", 0)
my_dict.get("B", 0)
# 출력-----------------------
# 66
# 🤔get()을 이용해서 존재하지 않는 key에 대한 value를 요청하면 에러 없이 None을 줍니다.
# 🤔사전에 해당 키가 존재하는 지 예상이 되지 않을 때 유용하게 사용됩니다.
# 🤔두번째 인자에 default 값을 넣으면 해당 key가 없을 때 default 값을 반환해주고 있다면 value 값을 반환해줍니다.
# 🤔두번째 인자에 default 값을 넣으면 해당 key가 없을 때 default 값을 반환해주고 있다면 value 값을 반환해줍니다.
# 존재하지 않는 키를 탐색하면 새로운 키:값 쌍을 생성합니다.
my_dict["b"] = 98
my_dict["a"] = 97
# 출력---------------
# {'A': 65, 'B': 66, 'C': 67, 'b': 98, 'a': 97}
# 키가 존재하지 않는 경우 기본값을 반환하도록 설정 가능
my_dict.get("qqq", "키가 없음")
# 출력-------------------------------
# '키가 없음'
# 🤔멤버쉽 연산자를 사용해서 에러를 피하는 방법도 있어요.
if "b" in d:
print("값은 ", d["b"])
else:
print("키가 없음")
# 키:값 삭제(del)
my_dict = {"A": 65, "B": 66, "C": 67, "D": 68}
del my_dict["A"]
# 출력----------------
# {'B': 66, 'C': 67, 'D': 68}
# 🤔리스트에도 del을 사용할 수 있습니다.
my_list = ["A", "B", "C", "D", "E"]
del my_list[1:3]
# 출력--------------
# ['A', 'D', 'E']
# pop()
my_dict = {"A": 65, "B": 66, "C": 67, "D": 68}
my_dict.pop("A"), my_dict
# 출력-----------------------
# 65, {'B': 66, 'C': 67, 'D': 68}
# 🤔list와 달리 인덱스가 아니라 키를 넣어줘야 합니다.
# 모두 지우고 싶을 때는 clear()도 사용할 수 있습니다.
my_dict.clear()
'파이썬' 카테고리의 다른 글
[파이썬] 변수에 값을 대입과 동시에 표현식으로!(바다코끼리 연산자) (0) | 2024.03.13 |
---|---|
[파이썬] 객체가 특정 타입이 맞는지 확인하고 싶다.(isinstance) (0) | 2024.03.13 |
[파이썬] 집합 (0) | 2024.03.12 |
[파이썬] 튜플 (1) | 2024.03.12 |
[파이썬] 리스트 (0) | 2024.03.11 |