🐍Dict

νŒ”λ¦¬λ™Β·2021λ…„ 7μ›” 9일
2

🐍Dict

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©΄μ„œ λ‚΄κ°€ λ”•μ…”λ„ˆλ¦¬μ— λŒ€ν•œ μžμ„Έν•œ 이해가 λΆ€μ‘±ν•œ κ±Έ μ•Œκ²Œ 됐닀. κ·Έλž˜μ„œ 이번 κΈ°νšŒμ— ν™•μ‹€νžˆ 정리 ν•΄λ³΄κ³ μž ν•œλ‹€.

Dict

  • λ”•μ…”λ„ˆλ¦¬λŠ” key-value 쌍으둜 μ΄λ£¨μ–΄μ ΈμžˆλŠ” ꡬ쑰이닀.
  • λ˜ν•œ λ”•μ…”λ„ˆλ¦¬λŠ” ν•΄μ‹œ(Hash) 자료ꡬ쑰둜 이루어져 μžˆλ‹€.
    • νž˜λ“€κ²Œ hashκ΅¬ν˜„μ„ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

λ”•μ…”λ„ˆλ¦¬ 생성

# 빈 λ”•μ…”λ„ˆλ¦¬ 생성
seulgi = {}
seulgi = dict()

# νŠΉμ • key value값을 가진 λ”•μ…”λ„ˆλ¦¬ 생성 
seulgi = {
   'name': 'Kang-seul-gi'
   'korean-age' : 28
   'group' : 'Red-Velvet'
}
# λ”•μ…”λ„ˆλ¦¬λ₯Ό valueλ₯Ό κ°€μ§€λŠ” λ”•μ…”λ„ˆλ¦¬ 생성 
redvelvet = {
    'Irene' : {
        'name' : 'Bae-Ju-Hyeon',
        'age' :  31
    },
    'Seulgi' : {
        'name' : 'Kang-Seul-Gi',
        'age' : 28
    }
}

ν‚€ 쀑볡 λΆˆκ°€!

  • μ€‘λ³΅λœ keyλŠ” λ”•μ…”λ„ˆλ¦¬μ— μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€.
redvelvet = {
	'Irene' : {
        'name' : 'Bae-Ju-Hyeon',
        'korean_age' :  31
    },
    'Seulgi' : {
        'name' : 'Kang-Seul-Gi',
        'korean_age' : 28
    }
    'Seulgi' : {
      	'name' : bear',
        'age' : 27 
    }
}
print(redvelvet)
redvelvet = {
	'Irene' : {
        'name' : 'Bae-Ju-Hyeon',
        'korean_age' :  31
    },
    'Seulgi' : {
      	'name' : bear',
        'age' : 27 
    }
}

seulgiλ₯Ό ν‚€λ‘œ κ°–λŠ” μš”μ†Œκ°€ 2개 있으면 뒀에 μžˆλŠ” μš”μ†Œλ§Œ μ €μž₯λœλ‹€.
ν‚€λŠ” μ€‘λ³΅λ˜μ§€ μ•ŠλŠ”λ‹€.

zipμ‚¬μš©

  • λ”•μ…”λ„ˆλ¦¬λ₯Ό λ§Œλ“€ λ•Œ zipν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬κ°€μ§€ μš”μ†Œλ“€μ„ κ²°ν•©ν•˜μ—¬ λ”•μ…”λ„ˆλ¦¬λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
exo = dict(zip(['D.O', 'KAI', 'SEHUN'],[29, 28, 28]))
print(exo)
{'D.O': 29, 'KAI': 28, 'SEHUN': 28}
  • key 값을 κΈ°μ€€μœΌλ‘œ 합쳐쀀닀. 예λ₯Ό λ“€μ–΄ key 값이 2개면 2개만 짝을 λ§žμΆ”μ–΄μ„œ 합쳐쀀닀.
exo = dict(zip(['D.O', 'KAI'],[29, 28, 27]))
print(exo)
{'D.O': 29, 'KAI': 28}

λ”•μ…”λ„ˆλ¦¬ 킀에 μ ‘κ·Όκ³Ό ν• λ‹Ή

  • λ”•μ…”λ„ˆλ¦¬ 킀에 μ ‘κ·Ό ν•  λ•ŒλŠ” λ”•μ…”λ„ˆλ¦¬ 뒀에 []μ•ˆμ— 킀값을 λ„£κ³  μ ‘κ·Όν•œλ‹€.
exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28}
>>> exo['D.O']
29
>>> exo['D.O'] = 28 
print(exo)
exo = {'D.O': 28, 'KAI': 28, 'SEHUN': 28}

λ”•μ…”λ„ˆλ¦¬μ— ν‚€-κ°’ 쌍 μΆ”κ°€ν•˜κΈ°

  • λ”•μ…”λ„ˆλ¦¬μ˜ ν‚€ 값을 쌍으둜 μΆ”κ°€ν•˜λŠ” λ©”μ†Œλ“œλŠ” 2개 κ°€ μžˆλ‹€.
  1. setdefault: ν‚€-κ°’ 쌍 μΆ”κ°€
  2. update: ν‚€μ˜ κ°’ μˆ˜μ •, ν‚€κ°€ μ—†μœΌλ©΄ ν‚€-κ°’ 쌍 μΆ”κ°€

setdefault

exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28}
exo.setdefault('SUHO')
>>> exo 
{'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO' : None}

setdefault λŠ” 킀값을 μΆ”κ°€ν•˜κ³  valueκ°’μ—λŠ” μžλ™μœΌλ‘œ None이 λ“€μ–΄κ°„λ‹€.
기본값을 μ§€μ •ν•˜λ©΄ 기본값을 μ €μž₯ν•œλ’€ 해당값을 λ°˜ν™˜ν•œλ‹€.

exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO' : None}
exo.setdefault('XIUMIN', 32)
>>>32 
print(exo)
{'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO' : None, 'XIUMIN': 32}

이미 μžˆλŠ” ν‚€κ°’μ˜ 값을 λ³€κ²½ν•˜λ €κ³  해도 λ³€κ²½ λ˜μ§€ μ•ŠλŠ”λ‹€.

exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO' : None, 'XIUMIN': 32}
exo.setdefault('SUHO', 31)
print(exo)
exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO' : None, 'XIUMIN': 32}
# SUHO의 값이 λ³€κ²½λ˜μ§€ μ•Šμ•˜λ‹€. 

update

exo = exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO' : None, 'XIUMIN': 32}
exo.update(SUHO=31)
print(exo)
{'D.O': 29, 'KAI': 28, 'SEHUN': 28, 'SUHO': 31, 'XIUMIN': 32}

updateλŠ” 값을 μˆ˜μ •ν•  수 있고 ν•΄λ‹Ήν•˜λŠ” 킀값이 μ—†μœΌλ©΄ μΆ”κ°€ν•  μˆ˜λ„ μžˆλ‹€.

get method μ‚¬μš©ν•˜κΈ°

get λ©”μ†Œλ“œλŠ” get(key,x) 둜 μ‚¬μš©ν•  수 μžˆλ‹€. μ΄λŠ” μ§€μ •ν•œ key의 valueλ₯Ό λ¦¬ν„΄ν•˜κ³  'λ”•μ…”λ„ˆλ¦¬μ— keyκ°€ μ—†λŠ” 경우, xλ₯Ό λ¦¬ν„΄ν•΄μ€˜λΌ' λŠ” λœ»μ΄λ‹€.

exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28}
>>> exo.get('D.O','#')
29
>>>exo.get('sdk', '#')
#

λ”•μ…”λ„ˆλ¦¬ keyκ°’ μ§€μš°κΈ°

del dict_obj[key]

exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28}
>>> del exo['D.O']
>>> exo
{'KAI': 28, 'SEHUN': 28}

pop(key,Default)

exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28}
>>> exo.pop('D.O','#')
print(exo)
{'KAI': 28, 'SEHUN': 28}

popν•œ λ°μ΄ν„°λŠ” 리턴값이 μžˆμœΌλ―€λ‘œ λ³€μˆ˜μ— 담을 수 μžˆλ‹€.

a = exo.pop('D.O','#')
print(a)
29

ν‚€ 쑴재 μ—¬λΆ€ 확인 및 개수 μƒˆκΈ°

  • in μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ ν‚€μ˜ μ‘΄μž¬μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆλ‹€.
'SEHUN' in exo 
>>> True 
'SDK' in exo 
>>> False 
  • len ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ ν‚€μ˜ 개수λ₯Ό μ•Œ 수 μžˆλ‹€.
exo = {'D.O': 29, 'KAI': 28, 'SEHUN': 28}
len(exo)
>>> 3

defaultdict

  • μ§€κΈˆκΉŒμ§€ λ”•μ…”λ„ˆλ¦¬μ—μ„œλŠ” μ—†λŠ” 킀값에 μ ‘κ·Όν•˜λ©΄ μ—λŸ¬κ°€ 났닀.
  • 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” 게 defaultdictλ‹€.
from collections import defaultdict 
exo = defaultdict(int)
>>> exo['D.O']
0
print(exo)
defaultdict(<class 'int'>, {'D.O': 0})

defaultdictλ₯Ό μ‚¬μš©ν•˜μ—¬ λ”•μ…”λ„ˆλ¦¬λ₯Ό μƒΉμ„±ν•˜λ©΄ μ—†λŠ” 킀값에 접근해도 λ””ν΄νŠΈ 값을 value둜 ν•΄μ„œ μƒμ„±ν•œλ‹€.
defaultdict의 λ””ν΄νŠΈ 값은 λ‹€μ–‘ν•œ 것을 지정할 수 μžˆλ‹€. (list,set,int,string)

profile
λ°°μ›€μ˜ 기둝

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보