Dictionary
관련된 키와 값을 서로 모아둔 것으로 {'key1': 'val1', 'key2': 'val2' ...} 의 형태를 가지고 있다.
key 에는 immutable 한 값(int, float, str, tuple, bool)만 사용할 수 있으며, key 값은 중복될 수 없다.
dictionary의 값을 출력하려면 [ ] 를 이용하여 키에 접근해야 한다.
>>> my_dict = {'sue': '517'}
>>> my_dict['sue']
'517'
# 수정 및 삭제도 가능하다
>>> my_dict['sue'] = '93517'
>>> my_dict['sue']
'93517'
>>> del my_dict['sue']
>>> my_dict
{}
# 키가 있는지 확인하는 방법
>>> my_dict = {'sue': '517'}
>>> 'sue' in my_dict
True
>>> 'Choi' in my_dict
False
# 키가 없는지 확인하려면 not in 을 사용한다.
Dictionary method
dict.values( ) / dict.keys( )
>>> my_dict = {'과일':'사과', '채소':'배추'}
>>> for i in my_dict.values():
print(i)
사과
배추
>>> for i in my_dict.keys():
print(i)
과일
채소
dict.items( )
key 와 val 을 함께 뽑아낸다.
>>> my_dict = {'과일':'사과', '채소':'배추'}
>>> for i in my_dict.items():
print(i)
('과일', '사과')
('채소', '배추')
len(dic)
dictionary의 개수(키의 개수=값의 개수)를 구할 때 사용한다.
>>> my_dict = {'과일':'사과', '채소':'배추'}
>>> len(my_dict)
2
추가와 삭제
추가 : setdefault, update
x.setdefault('key', 값)
딕셔너리에 키-값 쌍을 추가한다.
>>> my_dict = {'과일':'사과', '채소':'배추'}
>>> my_dict.setdefault('간식','과자')
'과자' # 값을 한 번 반환한다
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자'}
x.update(key=val)
딕셔너리에 키-값을 추가하거나 수정할 때 사용한다.
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자'}
>>> my_dict.update(고기='오리')
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자', '고기': '오리'}
이미 있는 key 의 경우 수정된다.
>>> my_dict.update(고기='돼지')
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자', '고기': '돼지'}
여러 쌍의 정보를 수정하거나 추가할수도 있다.
>>> my_dict.update(고기='양', 주식='빵')
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자', '고기': '양', '주식': '빵'}
삭제 : pop, del
x.pop('key')
>>> my_dict.pop('주식')
'빵'
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자', '고기': '양'}
del x['key']
>>> del my_dict['고기']
>>> my_dict
{'과일': '사과', '채소': '배추', '간식': '과자'}
dict comprehension
for 반복문으로 key 생성하기
{키 : 값 for 키, 값 in dict}
= dict({키 : 값 for 키, 값 in dict})
# 1. 키 가져오기
>>> keys = ['a', 'b', 'c']
>>> x = {key : value for key, value in dict.fromkeys(keys).items()}
>>> x
{'a': None, 'b': None, 'c': None}
# 2. 값 할당하기
>>> x['a'] = 3
>>> print(x)
{'a': 3, 'b': None, 'c': None}
if 조건문으로 키 값 삭제하기
{키 : 값 for 키, 값 in dict if 조건식}
= dict({키 : 값 for 키, 값 in dict if 조건식})
# 위의 코드에 이어서
>>> x['b'] = 5
>>> x['c'] = 7
>>> x
{'a': 3, 'b': 5, 'c': 7}
>>> x = {key : value for key, value in x.items() if value < 7}
>>> x
{'a': 3, 'b': 5}
할당과 복사
dictionary를 다른 변수에 그냥 할당하게 될 경우, 두 dic은 변수 이름만 다를 뿐 같은 객체가 된다. 즉, 하나의 dic만 존재하게 된다.
dictionary를 완전히 두개로 만드려면 copy method를 사용해야 한다.
>>> x = {'과일':'사과', '채소':'배추'}
>>> y = x.copy()
>>> x is y
False
>>> x == y
True
이때, 두 dic은 복사되었으나 별개의 존재이므로 한 쪽의 값을 변경해도 다른 쪽에 영향을 미치지 않는다.
그러나 중첩된 dic의 경우, 단순한 copy method를 사용하는 것만으로는 별개로 나눠지지 않는다. 이런 경우 deepcopy 함수를 사용해야 한다.
# just use shallow copy (얕은 복사)
>>> x = {'과일': {'사과': '부사'}, '채소': {'구황작물': '감자'}}
>>> y = x.copy()
>>> y['과일']['사과'] = '아오리'
>>> x
{'과일': {'사과': '아오리'}, '채소': {'구황작물': '감자'}}
# use deepcopy
>>> x = {'과일': {'사과': '아오리'}, '채소': {'구황작물': '감자'}}
>>> import copy
>>> y = copy.deepcopy(x)
>>> y['과일']['사과'] = '부사'
>>> y
{'과일': {'사과': '부사'}, '채소': {'구황작물': '감자'}}
>>> x
{'과일': {'사과': '아오리'}, '채소': {'구황작물': '감자'}}
'python' 카테고리의 다른 글
args & kwargs (0) | 2021.04.27 |
---|---|
set (0) | 2021.04.27 |
list (0) | 2021.04.27 |
if & while (0) | 2021.04.27 |
기타 함수와 연산자 (0) | 2021.04.27 |