파이썬 자료구조 :: 딕셔너리 dict *
프로그래머스 기초 단계 6일차를 풀면서 자료구조가 많이 부족함을 느껴서 정리를 해볼려고 한다.
[딕셔너리 dict 정리편]
참고 사이트 : 제대로 파이썬 (위키독스)
Container 타입 객체
Iterable객체처럼 type으로 확인되지 않는 객체이고, 특성 속성을 가진 객체를 Container 객체라고 이야기한다.
파이썬에 내장되어있는 Container 타입은 dict, set 이 있다.
Container 객체는 순서정보를 포함하지 않아서, 선언할때랑 출력할때랑 값의 순서가 달라질 수 도 있다.
* Container타입들중에 순서를 가진 객체를 Sequence객체라 한다. list, tuple, str이 이에 해당 된다.
dictionary (dict)
이 객체는 dict 타입이면서 동시에 Container 타입이고, iterable이다.
이름처럼 사전과 비슷하다.
단어에 뜻이 연결되어있는 사전처럼, dict는 key에 value 값들이 각각 매핑되어 있는 객체
dict 타입은 *매핑타입이기도 하다.
* 매핑타입이란, key와 value 값이 한 쌍을 이루는 데이터 구조. key와 value를 연결(map)하는 데이터 구조를 매핑타입이라고 한다.
dict 문법:
dict_ex = { key1 : value1, key2 : value2 }
중괄호 안에, 키워드와 키워드에 매칭되는 값은 콜론(:)을 이용해 연결하고, 컴마(,)를 통해 key-value 값 구분
dict 선언:
dict_1 = { } #빈 dict 생성
dict_2 = dict() #dict 클래스를 활용한 dict 생성
dict 출력
key 값을 인덱스로 삼고, value 값을 출력한다.
dict[key]
members = { 'name': 'aldonza', 'age': 20, 'nickname': 'dulcinea'}
#value 값 출력
print(members['name']) #출력 'aldonza'
print(members['age']) #출력 20
print(members['nickname']) #출력 'dulcinea'
찾을려는 value 가 없으면, 에러가 난다.
dict 추가
members = {}
members['name'] = 'aldonza'
members['age'] = 20
members['nickname'] = 'dulcinea'
print(members) #출력 {'name': 'aldonza', 'age': 20, 'nickname': 'dulcinea'}
a = {'x': 1}
a['x'] = 100
print(a) #{'x': 100}
dict 제거
1. del members[key]
위의 members와 x 딕셔너리를 활용한다고 했을때, del 키워드로 값을 제거 가능
메서드나 함수가 아닌 키워드이기 때문에 dict 객체 앞에 del를 써야한다.
2. members.pop(key)
dict의 pop 제거 함수는 리스트, 튜플, 집합때랑 다르게 pop() 으로 하면 오류가 난다.
매개변수로 key값을 입력해야한다
3. members.popitem()
member = {'이름': ['홍길동', '승연'], '나이': [100, 20]}
del member['이름']
# {'나이': [100, 20]}
member = {'이름': ['홍길동', '승연'], '나이': [100, 20]}
member.pop('이름')
# {'나이': [100, 20]}
member = {'이름': ['홍길동', '승연'], '나이': [100, 20]}
member.popitem()
# {'이름': ['홍길동', '승연']}
dict 메서드
dict안에 만약 이미 해당 key값으로 값이 지정되어 있다면,
값을 덮어쓰지 않고, 기존에 있는 값을 리턴
만약 dict안에 해당 key가 없었다면, 지정한 값을 리턴해주고 dict안에 값을 세팅
>>> a = {'x':1, 'y':2}
>>> a.setdefault('x', 100)
1
>>> a
{'y': 2, 'x': 1}
>>> a.setdefault('z', 3)
3
>>> a
{'y': 2, 'z': 3, 'x': 1}
2. dict.get(key)
dict안에 키워드에 매칭되는 값이 없다면 None을 리턴해주고, 키워드에 매칭되는 값이 있다면 해당 값을 리턴
get 메서드를 안쓰면, key 값에 매칭되는 값이 없을때 error를 발생하는데
get 메서드를 쓰면, 값이 없더라도 Error발생하지 않기때문에 유용함
>>> a = {'x': 1, 'y': 2}
>>> a
{'y': 2, 'x': 1}
>>> print(a.get('x'))
1
>>> print(a['z'])
KeyError 발생!
>>> print(a.get('z'))
None
3. dict1.update(dict2)
dict1 에 dict2 를 합치는 것
>>> a = {'x': 1, 'y: 2}
>>> b = {'z': 3}
>>> a.update(b)
>>> a
{'x':1, 'y':2, 'z': 3}
4. dict.keys() key 값만 뽑을때
5. dict.values() value 값만 뽑을때
6. dict.items() key, value 값 둘 다 뽑을때
a = {'x':1 ,'y':2 , 'z': 3}
#dict
for key in a:
print(key) #x - y - z
print(a[key]) #1 - 2 - 3
#dict.values()
for value in a.values():
print(value) #1 - 2 - 3
#dict.items()
for twin in a.items() :
print(twin) #('x', 1)-('y', 2)-('z', 3)
for key, value in a.items():
print(key, value) #x 1 - y 2 - z 3
dict를 쓰는 문제는 대부분, A는 a다. B는 b다. 처럼 서로 대응되는 값일때 주로 사용하는 듯하다.
출처: https://wikidocs.net/198057 |
출처: https://wikidocs.net/162243 |
댓글
댓글 쓰기