본문 바로가기
python

dictionary

by csue 2021. 4. 27.

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