πŸ‘¨β€πŸ‘©β€πŸ‘¦β€πŸ‘¦

4.4.4. λ”•μ…”λ„ˆλ¦¬

1. Dictionary

  • λ”•μ…”λ„ˆλ¦¬λŠ” μˆœμ„œκ°€ μ—†λŠ” μžλ£Œν˜•μž…λ‹ˆλ‹€.
  • μ‚¬μ „ν˜•μ€ Key와 Value κ°€ ν•˜λ‚˜μ˜ 묢음으둜 이루어진 자료 μ²΄κ³„μž…λ‹ˆλ‹€.
  • κ°’μ˜ 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • λ‹€λ₯Έ μžλ£Œν˜•μ„ μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν‚€μ˜ 쀑볡은 ν—ˆλ½ν•˜μ§€ μ•Šκ³ , κ°’μ˜ 쀑볡을 ν—ˆλ½ν•©λ‹ˆλ‹€.
 
λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” Hash, Map λ“± λ‹€λ₯Έ μš©μ–΄λ‘œ λΆˆλ¦¬κΈ°λ„ ν•©λ‹ˆλ‹€.
 
{ key : value }
 
μœ„μ˜ ν˜•νƒœκ°€ κΈ°λ³Έ ν˜•νƒœμž…λ‹ˆλ‹€. μ—¬λŸ¬κ°€μ§€μ˜ 킀와 κ°’μœΌλ‘œ κ΅¬μ„±λ˜λŠ” 경우의 ν˜•νƒœλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
test = { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }
 
μž…λ ₯된 값은 μ•„λž˜μ™€ 같이 ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
d = {'one' : 'ν•˜λ‚˜', 'two' : 'λ‘˜', 'three' : 'μ…‹'} d d['one']
 
좜λ ₯
'ν•˜λ‚˜'
keyκ°’μœΌλ‘œ valueλ₯Ό ν˜ΈμΆœν•  수 μžˆμ§€λ§Œ, value둜 key값을 ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.
 
μ•„λž˜ 좜λ ₯ κ²°κ³Όλ₯Ό 확인해보면 값을 λ³€κ²½ν•  수 μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
d = {'one' : 'ν•˜λ‚˜', 'two' : 'λ‘˜', 'three' : 'μ…‹'} d['one'] = 1 d
 
좜λ ₯
{'one' : 1, 'two' : 'λ‘˜', 'three' : 'μ…‹'}
 
예제λ₯Ό ν•˜λ‚˜ 더 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” μΌλΆ€λŸ¬ ν‚€λ₯Ό μ€‘λ³΅ν•˜μ—¬ μ‚½μž…ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
μž…λ ₯
d = {'one' : 'ν•˜λ‚˜', 'one' : 'ν•˜λ‚˜2', 'one' : 'ν•˜λ‚˜3', 'two' : 'λ‘˜', 'three' : 'μ…‹'} d d = {'one' : 'ν•˜λ‚˜', 'one1' : 'ν•˜λ‚˜1', 'one2' : 'ν•˜λ‚˜2', 'two' : 'λ‘˜', 'three' : 'μ…‹'} d
 
좜λ ₯
{'one' : 'ν•˜λ‚˜3', 'two' : 'λ‘˜', 'three' : 'μ…‹'} {'one' : 'ν•˜λ‚˜', 'one1' : 'ν•˜λ‚˜1', 'one2' : 'ν•˜λ‚˜2', 'two' : 'λ‘˜', 'three' : 'μ…‹'}
λ§ˆμ§€λ§‰μ— λ“€μ–΄κ°„ keyκ°’μ˜ valueκ°€ 좜λ ₯λ©λ‹ˆλ‹€. ν‚€μ˜ 쀑볡은 λΆˆκ°€λŠ₯ ν•˜μ§€λ§Œ value의 쀑볡이 κ°€λŠ₯ν•˜λ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
 
μ΄λ²ˆμ—λŠ” λ”•μ…”λ„ˆλ¦¬λ₯Ό λ§Œλ“œλŠ” λ‹€μ–‘ν•œ 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
μž…λ ₯
d = {} type(d) d = {10} type(d) d = dict() d
 
좜λ ₯
dict set #킀와 value둜 λ§€ν•‘ν•˜μ§€ μ•Šμ•„μ„œ setμ΄λΌλŠ” 집합이 좜λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€. {}
 
μž…λ ₯
dict('leehojun') dict(['one' , 'ν•˜λ‚˜'), ('two', 'λ‘˜')]) #λŒ€κ΄„ν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ 킀와 valueλ₯Ό ꡬ별해야 ν•©λ‹ˆλ‹€. dict(name = 'leehojun',age = 10)
 
좜λ ₯
ERROR #킀와 valueλ₯Ό ꡬ별할 수 μ—†μ–΄μ„œ ERRORκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. {'one' : 'ν•˜λ‚˜', 'two' : 'λ‘˜'} {'name' : 'leehojun' , 'age' = 10}
 
μ΄λ²ˆμ—λŠ” zip을 μ‚¬μš©ν•΄μ„œ mapping을 ν•œ λ‹€μŒ dict둜 λ§Œλ“œλŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
μž…λ ₯
list(zip('ABC', '123', 'abc')) dict(zip('ABC', '123')) #ν˜•λ³€ν™˜
 
좜λ ₯
[('A', '1', 'a'), ('B', '2', 'b'), ('C', '3', 'c') {'A' : '1', 'B' : '2', 'C' : '3'}
 
in μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ key의 포함 μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
d = {'one' : 'ν•˜λ‚˜', 'two' : 'λ‘˜', 'three' : 'μ…‹'} 'ν•˜λ‚˜' in d 'one' in d
 
좜λ ₯
False True
key κ°’μ—μ„œλ§Œ 포함 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° λ•Œλ¬Έμ— 'ν•˜λ‚˜'의 값이 d에 μžˆμ–΄λ„ Falseκ°€ 좜λ ₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
 
λ‹€μŒ 예제처럼 value에 리슀트λ₯Ό 넣을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
menu = { coffee : ['americano', 'cafe latte', 'mocah latte'], tea: ['green tea', 'black tea'], fruits: ['orange juice', 'pineapple juice'] }
 
μ‚¬μ „ν˜•μ— 값을 μΆ”κ°€ν•  λ•ŒλŠ” 킀값을 [ ]μ•ˆμ— λ„£κ³ , 값을 ν• λ‹Ήν•΄μ€λ‹ˆλ‹€.
μž…λ ₯
my_score = { 'korean': 90, 'english': 80, 'math': 100 } my_score['science'] = 95 print(my_score)
 
좜λ ₯
{'korean': 90, 'english': 80, 'math': 100, 'science': 95}
 
μ‚¬μ „ν˜•μ— μš”μ†Œλ₯Ό μ‚­μ œν•˜κ³  싢을 λ•ŒλŠ” delν‚€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
μž…λ ₯
my_score = { 'korean': 90, 'english': 80, 'math': 100 } del my_score['english'] print(my_score)
 
좜λ ₯
{'korean': 90, 'math': 100}
 
μ‚¬μ „ν˜•μ— μš”μ†Œμ˜ 길이λ₯Ό μ•Œκ³  싢을 λ•ŒλŠ” lenλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
μž…λ ₯
l = [20, 30] len(l) len(d)
 
좜λ ₯
2 2
len은 λ¦¬μŠ€νŠΈμ—μ„œλ„ μ‚¬μš©κ°€λŠ₯ν•˜κ³ , λ”•μ…”λ„ˆλ¦¬μ—μ„œλ„ μ‚¬μš©κ°€λŠ₯ν•©λ‹ˆλ‹€.
 
μ‚¬μ „ν˜•μ€ Key와 Valueκ°€ λ§€μΉ­λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ–΄λ–€ 값을 μ°Ύμ•„μ˜€λŠ”λ°μ— ꡉμž₯히 νŽΈλ¦¬ν•©λ‹ˆλ‹€.
μž…λ ₯
# κ΅­μ–΄ 성적을 μ•Œκ³  싢은 경우 my_score = { 'korean': 90, 'english': 80, 'math': 100 } print(my_score['korean']) # get ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ κ°€μ Έμ˜¬ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. print(my_score.get('korean')) # λ‹€λ§Œ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ 없을 λ•Œ # ν‚€κ°’λ§Œμ„ μ΄μš©ν•˜μ—¬ κ°€μ Έμ˜€λŠ” κ²½μš°μ—λŠ” 였λ₯˜κ°€ λ°œμƒν•˜λ©° get을 μ‚¬μš©ν•  λ•Œμ—λŠ” None을 λ¦¬ν„΄ν•©λ‹ˆλ‹€. # 였λ₯˜μ— λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬κ°€ μžˆλŠ” μ•ˆμ „ν•œ get을 μ‚¬μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•΄ λ³΄μž…λ‹ˆλ‹€.
 
좜λ ₯
90 90
 
λ‹€λ§Œ μ‚¬μ „ν˜•μ—μ„œμ˜ Key 값은 κ³ μœ ν•œ 값이기 λ•Œλ¬Έμ— λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
μž…λ ₯
my_score = { 'korean': 90, 'english': 80, 'math': 100, 'math': 90 } print(my_score)
 
좜λ ₯
{'korean': 90, 'english': 80, 'math': 90}
 
일반적으둜 생각해도 Key 값을 κΈ°μ€€μœΌλ‘œ 값을 μ°Ύμ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— κ³ μœ ν•  수 밖에 μ—†μŠ΅λ‹ˆλ‹€.
Key κ°’μœΌλ‘œ 리슀트λ₯Ό μ‚¬μš©ν•  순 μ—†μ§€λ§Œ, νŠœν”Œμ€ ν‚€κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Keyκ°€ κ³ μœ ν•˜λ‹€λŠ” 점을 생각해보면 λ³€ν•  수 μžˆλŠ” λ¦¬μŠ€νŠΈλŠ” μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ˜κ² μ§€μš”.
μž…λ ₯
map_check = { (1, 3): 10293, (1, 2): 39492, (1, 1): 49377, (1, 4): 12375 } print(map_check)
좜λ ₯
{(1, 3): 10293, (1, 2): 39492, (1, 1): 49377, (1, 4): 12375}
 
μž…λ ₯
my_check = { [1, 3]: 10293, [1, 2]: 39492, [1, 1]: 49377, [1, 4]: 12375 } print(my_check)
 
좜λ ₯
Traceback (most recent call last): File "/study.py", line 5, in <module> [1, 4]: 12375 TypeError: unhashable type: 'list'

2. λ”•μ…”λ„ˆλ¦¬μ˜ method

2.1 keys( )

사전 μžλ£Œν˜•μ— μžˆλŠ” Key 값듀을 κ°€μ Έμ˜€λ €λ©΄ keys ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λ•Œ λ°˜ν™˜λ˜λŠ” 것은 dict_keys κ°μ²΄μž…λ‹ˆλ‹€. 이 κ°μ²΄λŠ” λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•˜κ²Œ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
map_check = { (1, 3): 10293, (1, 2): 39492, (1, 1): 49377, (1, 4): 12375 } print(map_check.keys())
 
좜λ ₯
dict_keys([(1, 3), (1, 2), (1, 1), (1, 4)])
 

2.2 values( )

사전 μžλ£Œν˜•μ— μžˆλŠ” value 값듀을 κ°€μ Έμ˜€λ €λ©΄ values ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λ•Œ λ°˜ν™˜λ˜λŠ” 것은 dict_values κ°μ²΄μž…λ‹ˆλ‹€. 이 κ°μ²΄λŠ” λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•˜κ²Œ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
map_check = { (1, 3): 10293, (1, 2): 39492, (1, 1): 49377, (1, 4): 12375 } print(map_check.values())
 
좜λ ₯
dict_values([10293, 39492, 49377, 12375])
 

2.3 items( )

사전 μžλ£Œν˜•μ— μžˆλŠ” Key와 Valueλ₯Ό 리슀트의 ν˜•νƒœλ‘œ μ–»κΈ° μœ„ν•΄μ„œλŠ” items ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λ•Œ λ°˜ν™˜λ˜λŠ” 것은 dict_items κ°μ²΄μž…λ‹ˆλ‹€. 이 κ°μ²΄λŠ” λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•˜κ²Œ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
map_check = { (1, 3): 10293, (1, 2): 39492, (1, 1): 49377, (1, 4): 12375 } print(map_check.items())
 
좜λ ₯
dict_items([((1, 3), 10293), ((1, 2), 39492), ((1, 1), 49377), ((1, 4), 12375)])
 
자료 μ‚¬μ „ν˜• μ•ˆμ— μ›ν•˜λŠ” Keyκ°€ μžˆλŠ”μ§€ μ°Ύμ•„λ³Ό λ•Œμ—λŠ” in 을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž…λ ₯
my_score = { 'korean': 90, 'english': 80, 'math': 100 } print('math' in my_score) print('science' in my_score)
 
좜λ ₯
True False
 

2.4 get( )

keyκ°’μœΌλ‘œ value값을 ν˜ΈμΆœν•˜κ³  μ‹Άλ‹€λ©΄ get을 μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœν•©λ‹ˆλ‹€.
μž…λ ₯
def switch(x): return{1 : 'Mon', 2 : 'Tue', 3 : 'Wed', 4 : 'Thu' }.get(x) print(switch(3))
 
좜λ ₯
Wed
 

2.5 fromkeys( )

μ‹œν€€μŠ€ν˜• 자료λ₯Ό κ°€μ§€κ³  λ”•μ…”λ„ˆλ¦¬λ₯Ό λ§Œλ“€ λ•Œ fromkeysλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
μž…λ ₯
dict.fromkeys('leehojun') dict.fromkeys('leehojun',100)
 
좜λ ₯
{'i' : None, 'e' : None, 'h' : None, 'o' : None, 'j' : None, 'u' : None, 'n' : None} {'i' : 100, 'e' : 100, 'h' : 100, 'o' : 100, 'j' : 100, 'u' : 100, 'n' : 100}
 
μž…λ ₯
keys = ('name','age','grade') values = ('leehojun','10','수') dict.fromkeys('leehojun',100) dict.fromkeys(keys, values)
 
좜λ ₯
{'name' : ('leehojun','10','수'), 'age' : ('leehojun','10','수'), 'grade' : ('leehojun','10','수')}
값이 μ‹œν€€μŠ€μžλ£Œν˜•μœΌλ‘œ λ“€μ–΄κ°€λŠ” 것이 μ•„λ‹ˆλΌ λ˜‘κ°™μ€ κ°’μœΌλ‘œ λ“€μ–΄κ°„λ‹€λŠ” 것을 μ£Όμ˜ν•΄μ£Όμ„Έμš”.
 

2.6 update( )

기쑴의 데이터에 μΆ”κ°€λ‘œ 데이터λ₯Ό μΆ”κ°€ν•˜κ³  μ‹Άλ‹€λ©΄ updateν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”κ°€ν•΄μ€λ‹ˆλ‹€.
μž…λ ₯
d = {'one' : 'ν•˜λ‚˜', 'two' : 'λ‘˜', 'three' : 'μ…‹'} d.update({'one' : 1, 'two' : 2}) d
 
좜λ ₯
{'one' : '1', 'two' : '2', 'three' : 'μ…‹'}
 

3. λ”•μ…”λ„ˆλ¦¬ 순회

μž…λ ₯
d = {'two' : 2, 'three' : 'μ…‹'} for i in d: print(i)
 
좜λ ₯
two three
forλ¬Έμ—μ„œ λ”•μ…”λ„ˆλ¦¬λ₯Ό μˆœνšŒν•˜λ©΄ ν‚€μ˜ κ°’λ§Œ 좜λ ₯λ©λ‹ˆλ‹€.
 
μž…λ ₯
#ν‚€μ˜ κ°’κ³Ό vlaue순회 for i in d: print(i, d[i])
 
좜λ ₯
two 2 three μ…‹
 
μž…λ ₯
for i , j in d.items(): print(i, j) d.items()
 
좜λ ₯
two 2 three μ…‹ dict_items(['two', 2), ('three', 'μ…‹')])