2021.06.13 - [코딩/Python] - [Python/파이썬] 자료형 - Dictionary 1편 : 기초
2021.06.19 - [코딩/Python] - [Python/파이썬] 자료형 - Dictionary 2편 : 딕셔너리 컴프리헨션
자료형 중 딕셔너리에 대한 이해가 부족하여 작성하는 포스팅. 새로운 프로그램을 만들 때 딕셔너리를 활용해야 할 필요가 있어 기초 및 대표 함수에 대한 내용을 정리한다.
1. 딕셔너리(Dictionary)
-. 딕셔너리는 Key와 Value를 갖는 파이썬의 자료형이다.
-. Key와 Value는 한쌍으로 입력 된다.
-. 리스트는 대괄호 [ ] , 딕셔너리는 중괄호{ }로 구성한다는 것을 기억하자.
-. 아래 코드는 딕셔너리의 기본적인 구성과 각 key에 따른 Value를 조회하는 방법을 코드로 작성해보았다.
<코드>
#딕셔너리 3개요소 구성(Key : Value)
p = {'key' : 'value', 1 : 'b', '테스트':'test'}
#전체 딕셔너리 요소 출력
print(p)
#각 Key에 따른 Value 출력해보기
print(p[1])
print(p['key'])
print(p['테스트'])
<결과>
{'key': 'value', 1: 'b', '테스트': 'test'}
b
value
test
-. 중괄호 { } 안에 Key : Value 형태로 입력된다. Value를 조회하고 싶다면 딕셔너리명[Key]를 사용한다.
-. 리스트와 같이 인덱스(0,1,2,3...)을 통한 조회는 불가능하다. 위 p[1]의 1은 딕셔너리의 Key를 가리키는 것이므로 혼동하지 말자. 아래를 보면 에러가 발생함을 확인할 수 있다.
<코드>
p = {'key' : 'value', 1 : 'b', '테스트':'test'}
#인덱스로 조회하면?
print(p[0])
<결과>
Traceback (most recent call last):
File "c:\Users\Desktop\VS Code Project\Python\Practice\p1.py", line 5, in <module>
print(p[0])
KeyError: 0
2. 다양한 딕셔너리 형태
1) 딕셔너리의 형태인 Key : Value 형태에서 Value에는 튜플, 리스트 등 다른 자료형이 들어갈 수 있다.
<코드>
#과일의 Value는 리스트, 숫자의 Value는 튜플
p = {'과일' : ['사과','귤'] , "숫자" : (1,2,3)}
print(p['과일'])
print(p['숫자'])
<결과>
['사과', '귤']
(1, 2, '삼')
만약 위와 같이 Value가 리스트, 튜플같은 자료형으로 입력되었는데 Value의 각 요소를 조회하고 싶다면 아래와 같이 인덱스를 덧붙여주면 된다.(리스트, 튜플 인덱스 조회방법과 동일 함)
※ 사용법
딕셔너리명[Key][Index]
<코드>
p = {'과일' : ['사과','귤'] , "숫자" : (1,2,3)}
print(p['과일'][0])
print(p['과일'][1])
print(p["숫자"][2])
<결과>
사과
귤
3
2) 딕셔너리의 형태인 Key : Value 형태에서 Key는 중복될 수 없다.
Key가 중복될 경우 가장 마지막 요소만 조회된다. 첫 요소는 무시되기 때문에 Key는 중복되지 않게 딕셔너리를 생성해야 한다.
<코드>
p = {'과일' : ['사과','귤'] , "과일" : "수박"}
print(p)
<결과>
{'과일': '수박'}
만약 Key가 중복되게 생성해야할 경우는 아래와 같이 클래스 객체를 입력하는 방법으로 생성해야 한다. 이 부분은 다른 티스토리에서 잘 정리해주셔서 참고해서 코드를 작성했다.
(참고링크 : https://kangprog.tistory.com/27)
<코드>
#중복된 딕셔너리 생성을 위한 클래스 정의
class fruit(object):
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def __repr__(self):
return "'"+self.name+"'"
#dictionry 생성을 위한 빈 딕셔너리 생성
fruit_dict = {}
#중복된 Key값 3개 넣어보기
fruit_dict[fruit("과일")] = "수박"
fruit_dict[fruit("과일")] = "사과"
fruit_dict[fruit("과일")] = "바나나"
print(fruit_dict)
<결과>
{'과일': '수박', '과일': '사과', '과일': '바나나'}
위 형태는 딕셔너리의 Key값을 클래스의 객체 타입으로 넣는 형식이다. 따라서, 원래 딕셔너리에서 Key값을 통한 조회는 에러가 발생한다.
<코드>
print(fruit_dict["과일"])
<결과>
Traceback (most recent call last):
File "c:\Users\Desktop\VS Code Project\Python\Practice\p1.py", line 20, in <module>
print(fruit_dict["과일"])
KeyError: '과일'
3) Key값에는 리스트가 들어갈 수 없다. 대신 튜플은 가능하다.
딕셔너리의 Key값은 수정이 되냐, 안되냐에 따라 입력 가능 여부가 결정된다. 따라서 수정이 되는 리스트는 입력될 수 없다. 대신 튜플은 입력가능하다. 아래 2가지 예시를 보자.
Case1) Key값에 리스트 넣어보기
<코드>
p = {["과일","채소"] : ["사과", "당근"]}
<결과>
TypeError: unhashable type: 'list'
Key값에 리스트를 넣을 경우 타입에러가 발생하낟.
Case2) Key값에 튜플 넣어보기
<코드>
p = {("과일","채소") : ["사과", "당근"]}
print(p)
<결과>
{('과일', '채소'): ['사과', '당근']}
3. 딕셔너리에서 자주 쓰이는 함수들
점프투파이썬 교재를 보며 딕셔너리 자료형 사용시 자주 사용하는 함수들에 대해 정리해보았다. 잘쓸 것 같은 대표적인 3가지만 정리해보았고 더 필요한 내용은 점프투파이썬을 참고!
1) Key, Value로 리스트 만들기
<코드>
p = {"과일": "사과", "채소" : "당근", "육류" : "돼지고기"}
#Key를 리스트로 출력
print(p.keys())
#Value를 리스트로 출력
print(p.values())
<결과>
dict_keys(['과일', '채소', '육류'])
dict_values(['사과', '당근', '돼지고기'])
위 형태는 for 문을 통해 Key 또는 Value 개별 요소에 접근할 수 있다. 아래처럼 for문을 통해 각 요소를 출력할 수 있다.
<코드>
p = {"과일": "사과", "채소" : "당근", "육류" : "돼지고기"}
for a in p.keys():
print(a)
<결과>
과일
채소
육류
2) Key, Value 쌍으로 리스트화 하기
Key, Value를 쌍으로 리스트화하고 싶다면 items( ) 함수를 사용한다. 아래 결과에서 보면 알겠지만 리스트이 각 요소는 튜플이다.
<코드>
p = {"과일": "사과", "채소" : "당근", "육류" : "돼지고기"}
for a in p.items():
print(a)
<결과>
('과일', '사과')
('채소', '당근')
('육류', '돼지고기')
3) Key로 Value 얻기
위에서 정리했던 내용 중 Key를 통해 Value를 조회하려면 딕셔너리명[Key]를 사용하면 된다고 언급했다. get( )이라는 함수를 사용하면 동일한 결과를 출력한다.
2개의 차이점은 get( ) 함수를 사용할 경우 조회되는 Key값이 없으면 None을 반환한다. 딕셔너리명[key] 형태의 경우 Key값이 없으면 에러가 발생한다.
<코드>
p = {"과일": "사과", "채소" : "당근", "육류" : "돼지고기"}
print(p.get("과일"))
print(p.get("기타"))
<결과>
사과
None
리스트에 리스트 컴프리헨션이 있는 것처럼 딕셔너리에도 컴프리헨션 구문이 존재한다. 컴프리헨션 내용과 딕셔너리를 어디에 응용할지는 다음 편에 정리할 예정.
참고링크1 : https://wikidocs.net/16#_7 점프투파이썬 - 딕셔너리
참고링크2 : https://kangprog.tistory.com/27 - 딕셔너리 키 중복으로 입력하기
'코딩 > Python' 카테고리의 다른 글
[Python/파이썬] 자료형 - Dictionary 2편 : 딕셔너리 컴프리헨션 (0) | 2021.06.19 |
---|---|
[Python/파이썬] 객체를 함수 매개변수로 전달하기 - 전역변수, 지역변수, 매개변수 (0) | 2021.06.15 |
[Python/파이썬] 파이썬에서 엑셀 VBA 실행시키기 - xlwings 모듈 (1) | 2021.06.06 |
[Python/파이썬] 엑셀 VBA에서 파이썬 코드 실행시키기 - xlwings 모듈 (1) | 2021.06.06 |
[Python/파이썬] 특정 시간에 파이썬 코드 동작시키기 - schedule 모듈 (0) | 2021.05.16 |