[파이썬] 딕셔너리 다루기

조은지·2021년 5월 1일
0

출처 - https://wikidocs.net/16043
https://www.w3schools.com/python/ref_dictionary_clear.asp

1. 딕셔너리

  • 딕셔너리 타입은 immutable한 key와 mutable한 value로 맵핑되어있는 순서가 없는 집합
>>> {"a" : 1, "b":2}
{'a': 1, 'b': 2}
  • 키로는 immutable한 값을 사용할 수 있지만, mutable한 객체는 사용할 수 없다.
 immutable 예
>>> a = {1: 5, 2: 3}   # int 사용
>>> a
{1: 5, 2: 3}
>>> a = {(1,5): 5, (3,3): 3} # tuple사용
>>> a
{(1, 5): 5, (3, 3): 3}
>>> a = { 3.6: 5, "abc": 3} # float 사용
>>> a
{3.6: 5, 'abc': 3}
>>> a = { True: 5, "abc": 3} # bool 사용
>>> a
{True: 5, 'abc': 3}

# mutable 예
>>> a = { {1, 3}: 5, {3,5}: 3}     #set 사용 에러
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> a = {[1,3]: 5, [3,5]: 3}     #list 사용 에러
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a = { {"a":1}: 5, "abc": 3}     #dict 사용 에러
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
  • 순서가 없기 때문에 인덱스로는 접근할 수 없고, 키로 접근이 가능하다.
  • mutable한 객체이므로 키로 접근하여 값을 변경할 수 있다.

2. dictionary 선언

  • 딕셔너리를 선언할 때는 빈 중괄호를 선언.(set도 중괄호를 이용하지만 빈 중괄호로 선언하면 type이 dict가 된다)

  • dict constructor을 통해서 바로 키와 값을 할당하며 선언이 가능하다.

3. dictionary 변환

  • 리스트 속에 리스트나 튜플, 튜플 속에 리스트나 튜플의 값을 키와value로 나란히 입력하면 dict로 변경할 수 있다.
>>> name_and_ages = [['alice', 5], ['Bob', 13]]
>>> dict(name_and_ages)
{'alice': 5, 'Bob': 13}
>>> name_and_ages = [('alice', 5), ('Bob', 13)]
>>> dict(name_and_ages)
{'alice': 5, 'Bob': 13}
>>> name_and_ages = (('alice', 5), ('Bob', 13))
>>> dict(name_and_ages)
{'alice': 5, 'Bob': 13}
>>> name_and_ages = (['alice', 5], ['Bob', 13])
>>> dict(name_and_ages)
{'alice': 5, 'Bob': 13}

4. dictionary(딕셔너리) 복사

  • copy(), b=dict(a)는 얇은 복사
  • copy.deepcopy()를 사용해야 깊은 복사를 할 수 있다.
  1. dictionary for문
  • for문을 통해 딕셔너리를 돌리면 key값이 할당된다.
 for key in a:
 	print(key)
  • value값으로 for문을 반복하기 위해서는 values()를 사용해야 한다.
>>> for val in a.values():
	print(val)
  • key,value를 한 번에 for문으로 반복하려면items()를 사용한다.
>>> for key, val in a.items():
	print("key = {key}, value={value}".format(key=key,value=val))

6. dictionary의 in

dictionary의 in은 키에 한해서 동작한다.

Dictionary Methods

  1. clear() - 딕셔너리에 있는 모든 요소들을 삭제한다.

  2. copy() - 딕셔너리를 복사한다. (얕은 복사)

  3. fromkeys(key,val) - val은 optional. 해당 key를 가진 딕셔너리로 만들어준다.
x = ('key1', 'key2', 'key3')
#val없이 사용
thisdict = dict.fromkeys(x)
print(thisdict)
>>{'key1':None,'key2':None,'key3':None}
#val=0
thisdict = dict.fromkeys(x,0)
print(thisdict)
>>{'key1':0,'key2':0,'key3':0}
  1. get(keyname, val) - key값에 대한 value를 리턴한다.
    val은 optional.(만약 특정 key가 없으면 value를 리턴하게 함)

  2. items() - 딕셔너리에 있는 key,value쌍을 dict_items객체로 돌려준다.
    dict_items: [(key1,val1),(key2,val2)...]

  3. keys() - 딕셔너리에 있는 key들을 dict_keys객체로 리턴한다.

  4. values() - 딕셔너리에 있는 value들을 dict_values객체로 리턴한다.

  5. pop(key,val) -key를 가진 요소를 제거할 때 사용. key의 value를 리턴한다.
    val은 option

  6. popitem() - 가장 최근에 삽입된 요소를 제거한다.

  7. setdefault(key, val) - key에 대한 value를 리턴해준다.
    val은 option

    setdefault언제 사용하냐:
    1. https://www.daleseo.com/python-collections-defaultdict/
    2. https://wookkk.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC-get-setdefault

  8. update(iterable) :주어진 값을 딕셔너리 요소로 추가한다.

7. dictionary 정렬

7-1. key를 기준으로 정렬

ex = {..}
sorted(ex)
>>>['key1','key2','key3']

key값을 기준으로 정렬된 key list가 리턴된다.

7-2. value를 기준으로 정렬

ex={'key1':30,'key2':20,'key3':25}
sorted(ex,key= lambda x:ex[x])
>>>['key2','key3','key1']

value를 기준으로 정렬된 key list가 리턴된다.

7-3. items()를 이용하여 정렬

ex={'key1':30,'key2':20,'key3':25}
sorted(ex.items(),key= lambda x:x[0])
>>>[('key1',30),('key2':20),('key3':25)]
sorted(ex.items(),key= lambda x:x[1])
>>>[('key2',20),('key3':25),('key1':30)]

ex.items()를 이용하면 튜플의 리스트 형태로 리턴되기 때문에 x[0]으로 하면 key값, x[1]로 하면 value값을 기준으로 정렬할 수 있다.
튜플의 리스트 형태로 리턴된다.

0개의 댓글