본문 바로가기
Study (Data Science)/Python

UNIT 25. 딕셔너리 응용

by 콜라찡 2022. 11. 28.

1. 기본

1) 추가

  • .'딕셔너리명'.update(키=값) : 키가 문자열일때만! 딕셔나리 안의 키의 값을 수정하는 것. 만약 그 키 값이 없으면 자동으로 { } 안에 추가됨.
    • .update(a=200, b=300) : 여러가지 값을 한꺼번에 업데이트
    • .update(딕셔너리) : 키가 문자열이 아니어서 바로 키=값을 못한다면, a = {1:'일',2:'이'} 이렇게 a 딕셔너리를 추가함.
    • .update(리스트 or 튜플) : 리스트는 [[키1, 값1], [키2, 값2]] 형식으로 키와 값을 리스트로 만들고 이 리스트를 다시 리스트 안에 넣어서 키-값 쌍을 나열
    • .update(반복가능한객체) : 딕셔너리에 for문으로 키와 값을 더하고 싶을때 쓸 수 있을 것 같음. (zip([1,2],['one','two])). 꼭 괄호로 리스트 앞, zip 앞에 감싸주기. 
  • 딕셔너리에. append 되는가? >> 안됨. 각 번호가 몇개씩 있는지 세어서 counter 딕셔너리에 넣을때에도, append 쓰고 싶었지만 못썼음.. 이럴때는 키값 = 딕셔너리명.count(value값)
  • .setdefault(키,값) : 키와 값을 같이써서 추가는 할 수 있지만, 기존 딕셔너리의 값을 수정하지는 못한다.
>>> x.update(a=900, f=60)
>>> x
{'a': 900, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'f': 60}

>>> y = {1: 'one', 2: 'two'}
>>> y.update({1: 'ONE', 3: 'THREE'})
>>> y
{1: 'ONE', 2: 'two', 3: 'THREE'}

>>> y.update([[2, 'TWO'], [4, 'FOUR']])
>>> y
{1: 'ONE', 2: 'TWO', 3: 'THREE', 4: 'FOUR'}

>>> y.update(zip([1, 2], ['one', 'two']))
>>> y
{1: 'one', 2: 'two', 3: 'THREE', 4: 'FOUR'}

=======================
numbers = [1,2,3,4,5,6,1,1,3,4,4,3,7,8,9,9,0,7,5,6,4,3,2,2,7,4,5,6]
counter = {}
for i in numbers:
  counter[i]=numbers.count(i)
print (counter)

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.setdefault('a', 90)
10
>>> x
{'a': 10, 'b': 20, 'c': 30, 'd': 40}

2) 제거

  • 딕셔너리명.pop(키) : 키-값 쌍으로 지워버림. 지운값 출력으로 보여줌
  • del 리스트명[키] : 키-값 쌍으로 지워버림.
  • .popitem() : 딕셔너리의 제일 끝 키-값 지워버림. 
  • .clear() : 모든 키-값 삭제하여 빈 디렉토리로 만듬.  

3) 값 가져오기

  • .get(키) : 값을 가져옴
  • .get(키, 값) : 내가 지정한 키가 있으면 값을 가져오고, 없으면 내가 줬던 값을 가져옴. 만약 딕셔너리에 9:'구'라는 값이 없어도 내가 .get(9,'구') 라고 하면 '구'가 출력된다는 뜻.
  • for문에 잘 쓰이는 함수들
    • item() : 키,값 모두 가져옴. (키,값)의 형태로 [ ] 로 만들어 가져옴.
    • keys() : 키값만 모두 가져와 [] 로 만듬
    • values() : 값만 모두 가져와 []로 만듬

4) 리스트와 튜플 >> 딕셔너리로 만들기

  • dict.fromkeys(리스트나 튜플명)  : 리스트나 튜플을 딕셔너리로 바꿔주는데, 기존값들을 key값으로 하고, value는 비워둔 dic이 만들어진다
  • dict.fromkeys(리스트나 튜플명, 값) : 위와 같이 만든 dic에 동일한 값을 value로 넣은 딕셔너리가 만들어진다.
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.popitem()
('d', 40)
>>> x
{'a': 10, 'b': 20, 'c': 30}

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.clear()
>>> x
{}

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.get('a')
10

>>> x.get('z', 0)
0
-----------------------
>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x.items()
dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 40)])

>>> x.keys()
dict_keys(['a', 'b', 'c', 'd'])

>>> x.values()
dict_values([10, 20, 30, 40])
------------------------
>>> keys = ['a', 'b', 'c', 'd']
>>> x = dict.fromkeys(keys)
>>> x
{'a': None, 'b': None, 'c': None, 'd': None}

>>> y = dict.fromkeys(keys, 100)
>>> y
{'a': 100, 'b': 100, 'c': 100, 'd': 100}

2. for문에 응용하기

  • 딕셔너리 키,값 모두, 키만, 값만 출력해보기.
    • .items()
    • .keys()
    • .value()
for key, value in 딕셔너리이름.items():
     반복할 코드
     
# key 자체가 키값이고, value 자체가 값이다. 내가 주는 변수가 아니라 파이썬이 알고 있는 변수다.
그래서 key만 쓰면 알아서 key 값만 가져오고, value만 쓰면 알아서 value만 가져온다.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> for key, value in x.items():
...     print(key, value)
...
a 10
b 20
c 30
d 40

>>> for key in x.keys():
...     print(key, end=' ')
...
a b c d

>>> for value in x.values():
...     print(value, end=' ')
...
10 20 30 40

3. 딕셔너리 표현식 (comprehension)

리스트나 튜플에서 원하는 형태로 바로 dictionary 만들기

  • for문과 if문 활용
    • {키: 값 for 키, 값 in 딕셔너리}
    • dict({키: 값 for 키, 값 in 딕셔너리})1. keys 라는 이름을 가진 튜플을 dict.으로 가져와서 key값은 있고, value는 빈상태의 딕셔너리를 먼저 만들어두고2. .items()하여 그 키-값들을 출력해보고 3. 그 안에서 키, 값을 추출하여서4. key : value의 형태로 출력해줘.

>>> x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
>>> x = {key: value for key, value in x.items() if value != 20}
>>> x
{'a': 10, 'c': 30, 'd': 40}
# 1단계에서 value가 20인 순간, 그친구는 false여서 아웃당하게 됨.

 

4. 딕셔너리 안에 딕셔너리 (중첩 딕셔너리)

딕셔너리 = {키1: {키A: 값A}, 키2: {키B: 값B}}

planet 딕셔너리 안에 {mercury : {세부항목:값},venus : {}, earth : {}, mars : {}} 이렇게 중첩되어 들어감.

terrestrial_planet = {
    'Mercury': {
        'mean_radius': 2439.7,
        'mass': 3.3022E+23,
        'orbital_period': 87.969
    },
    'Venus': {
        'mean_radius': 6051.8,
        'mass': 4.8676E+24,
        'orbital_period': 224.70069,
    },
    'Earth': {
        'mean_radius': 6371.0,
        'mass': 5.97219E+24,
        'orbital_period': 365.25641,
    },
    'Mars': {
        'mean_radius': 3389.5,
        'mass': 6.4185E+23,
        'orbital_period': 686.9600,
    }
}
 
print(terrestrial_planet['Venus']['mean_radius'])    # 6051.8
  • 키에 접근하여 value를 가져올 때, 위에서 아래단계료 [키][키][키] 이렇게 나열하면 value를 가져오게 됨.
    • 단, [키] 사이에 , 없는 점 유의하고! { } 도 한번도 쓰지 않는다는 사실 유의하기
  • 중첩 딕셔너리는 중첩 리스트같이 .copy 안되고 copy.deepcopy()해줘야 함.
>>> x = {'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
>>> import copy             # copy 모듈을 가져옴
>>> y = copy.deepcopy(x)    # copy.deepcopy 함수를 사용하여 깊은 복사
>>> y['a']['python'] = '2.7.15'
>>> x
{'a': {'python': '2.7'}, 'b': {'python': '3.6'}}
>>> y
{'a': {'python': '2.7.15'}, 'b': {'python': '3.6'}}

 

728x90

댓글