๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Python

[Python] ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜•

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 2. 6.
๋ฐ˜์‘ํ˜•

ํŒŒ์ด์ฌ์€ ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด๋ฅผ ์—ฐ๊ด€ ๋ฐฐ์—ด ๋˜๋Š” ํ•ด์‹œ(Hash) ๋ผ๊ณ  ํ•œ๋‹ค.

ํŒŒ์ด์ฌ์—์„  ์ด๋Ÿฌํ•œ ์ž๋ฃŒํ˜•์„ ๋”•์…”๋„ˆ๋ฆฌ(Dictionary)๋ผ๊ณ  ํ•˜๋Š”๋ฐ, Key์™€ Value๋ฅผ ํ•œ ์Œ์œผ๋กœ ๊ฐ–๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.

๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ์ฒ˜๋Ÿผ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•ด๋‹น ์š”์†Œ๊ฐ’์„ ๊ตฌํ•˜์ง€ ์•Š๊ณ  Key๋ฅผ ํ†ตํ•ด Value๋ฅผ ์–ป๋Š”๋‹ค.

 

 

-๊ธฐ๋ณธ ๋”•์…”๋„ˆ๋ฆฌ

{Key1:Value1, Key2:Value2, Key3:Value3, …}

โ˜…Key์—๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ , Value์—๋Š” ๋ณ€ํ•˜๋Š” ๊ฐ’๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

>>> dic = {'name':'Tom', 'phone':'01012345678', 'birth':'1010'}
Key Value
name Tom
phone 01012345678
birth 1010

 

 

-Key๋กœ ์ •์ˆ˜ ๊ฐ’ 1, Value๋กœ ๋ฌธ์ž์—ด 'hello' ์‚ฌ์šฉ

>>> a = {1: 'hello'}

 

 

-Value์— ๋ฆฌ์ŠคํŠธ ๋„ฃ๊ธฐ

>>> a = ['a': [1, 2, 3]}

 

 

 

โ–ถ ๋”•์…”๋„ˆ๋ฆฌ ์Œ ์ถ”๊ฐ€, ์‚ญ์ œํ•˜๊ธฐ

 

-๋”•์…”๋„ˆ๋ฆฌ ์Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

>>> a = {1: 'a'}
>>> a[2] = 'b'   ← {2: 'b'} ์Œ ์ถ”๊ฐ€
>>> a
{1: 'a', 2: 'b'}

{1: 'a'} ๋”•์…”๋„ˆ๋ฆฌ์— a[2] = 'b' ์™€ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด ๋”•์…”๋„ˆ๋ฆฌ a์— Key์™€ Value๊ฐ€ ๊ฐ๊ฐ 2์™€ 'b'์ธ 2: 'b'๋ผ๋Š” ๋”•์…”๋„ˆ๋ฆฌ ์Œ์ด ์ถ”๊ฐ€๋œ๋‹ค.

 

>>> a['name'] = 'Tom'   ← {'name': 'Tom'} ์Œ ์ถ”๊ฐ€
>>> a
{1: 'a', 2: 'b', 'name': 'Tom'}

๋”•์…”๋„ˆ๋ฆฌ a์— 'name': 'Tom'๋ผ๋Š” ์Œ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

>>> a[3] = [1, 2, 3]   ← {3: [1, 2, 3]} ์Œ ์ถ”๊ฐ€
>>> a
{1: 'a', 2: 'b', 'name': 'Tom', 3: [1, 2, 3]}

Key๋Š” 3, Value๋Š” [1, 2, 3]์„ ๊ฐ€์ง€๋Š” ํ•œ ์Œ์ด ๋˜ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

 

-๋”•์…”๋„ˆ๋ฆฌ ์š”์†Œ ์‚ญ์ œํ•˜๊ธฐ

>>> del a[1]
>>> a
{'name': 'Tom', 3: [1, 2, 3], 2: 'b'}

del ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ del a[key]์ฒ˜๋Ÿผ ์ž…๋ ฅํ•˜๋ฉด ์ง€์ •ํ•œ Key์— ํ•ด๋‹นํ•˜๋Š” {key: value} ์Œ์ด ์‚ญ์ œ๋œ๋‹ค.

 

 

 

โ–ถ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

{"๊น€์—ฐ์•„":"ํ”ผ๊ฒจ์Šค์ผ€์ดํŒ…", "๋ฅ˜ํ˜„์ง„":"์•ผ๊ตฌ", "๋ฐ•์ง€์„ฑ":"์ถ•๊ตฌ"}

↑ ์‚ฌ๋žŒ ์ด๋ฆ„๊ณผ ํŠน๊ธฐ๋ฅผ ํ•œ ์Œ์œผ๋กœ ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ

 

 

 

โ–ถ ๋”•์…”๋„ˆ๋ฆฌ์—์„œ Key๋ฅผ ์‚ฌ์šฉํ•ด Value ์–ป๊ธฐ

>>> grade = {'Tom': 10, 'Jenny': 99}
>>> grade['Tom']   ← Key๊ฐ€ 'Tom'์ธ ๋”•์…”๋„ˆ๋ฆฌ์˜ Value๋ฅผ ๋ฐ˜ํ™˜
10
>>> grade['Jenny']   ← Key๊ฐ€ 'Jenny'์ธ ๋”•์…”๋„ˆ๋ฆฌ์˜ Value๋ฅผ ๋ฐ˜ํ™˜
99 

๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ, ๋ฌธ์ž์—ด์€ ์š”์†Œ๊ฐ’์„ ์–ป๊ณ ์ž ํ•  ๋•Œ ์ธ๋ฑ์‹ฑ์ด๋‚˜ ์Šฌ๋ผ์ด์‹ฑ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋”•์…”๋„ˆ๋ฆฌ๋Š” Key๋ฅผ ์‚ฌ์šฉํ•ด์„œ Value๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฟ์ด๋‹ค.

 

>>> a = {1: 'a', 2: 'b'}
>>> a[1]   ← Key๊ฐ€ 1์ธ ์š”์†Œ์˜ Value๋ฅผ ๋ฐ˜ํ™˜
'a'
>>> a[2]   ← Key๊ฐ€ 2์ธ ์š”์†Œ์˜ Value๋ฅผ ๋ฐ˜ํ™˜
'b'

๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ์— ์žˆ๋Š” ์ธ๋ฑ์‹ฑ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ a[1]์€ ๋”•์…”๋„ˆ๋ฆฌ {1: 'a', 2: 'b'}์—์„œ Key๊ฐ€ 1์ธ ๊ฒƒ์˜ Value์ธ 'a'๋ฅผ ๋Œ๋ ค์ฃผ๊ฒŒ ๋œ๋‹ค.

 

>>> a = {'a': 1, 'b': 2}
>>> a['a']
1
>>> a['b']
2

๋”•์…”๋„ˆ๋ฆฌ a๋Š” a[key]๋กœ ์ž…๋ ฅํ•ด์„œ Key์— ํ•ด๋‹นํ•˜๋Š” Value๋ฅผ ์–ป๋Š”๋‹ค.

 

>>> dic = {'name': 'Tom', 'phone': '01012345678', 'birth': '1010'}
>>> dic['name']
'Tom'
>>> dic['phone']
'01012345678'
>>> dic['birth']
'1010'

↑ Key๋ฅผ ์‚ฌ์šฉํ•ด์„œ Value๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•

 

 

-๋”•์…”๋„ˆ๋ฆฌ ๋งŒ๋“ค ๋•Œ ์ฃผ์˜ํ•  ์‚ฌํ•ญ

๋”•์…”๋„ˆ๋ฆฌ์—์„œ Key๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์ค‘๋ณต๋˜๋Š” Key ๊ฐ’์„ ์„ค์ •ํ•ด ๋†“์œผ๋ฉด ํ•˜๋‚˜๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ฒƒ๋“ค์ด ๋ชจ๋‘ ๋ฌด์‹œ๋œ๋‹ค๋Š” ์ ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

>>> a = {1: 'a', 1: 'b'}   ← 1์ด๋ผ๋Š” Key ๊ฐ’์ด ์ค‘๋ณต์œผ๋กœ ์‚ฌ์šฉ
>>> a
{1: 'b'}   ← 1: 'a' ์Œ์ด ๋ฌด์‹œ๋จ

โ˜…๋งˆ์ง€๋ง‰ Key๋งŒ ๊ฐ’์œผ๋กœ ์ธ์ •๋˜๋Š”๋“ฏ

 

>>> a = {[1, 2] : 'hi'}   ← ๋ฆฌ์ŠคํŠธ๋ฅผ Key๋กœ ์‚ฌ์šฉ
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'   ← ์˜ค๋ฅ˜ ๋ฐœ์ƒ

Key์— ๋ฆฌ์ŠคํŠธ๋Š” ์“ธ ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ํŠœํ”Œ์€ Key๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋”•์…”๋„ˆ๋ฆฌ์˜ Key๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š๋ƒ ์—†๋Š๋ƒ๋Š” Key๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฐ’์ธ์ง€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ธ์ง€์— ๋‹ฌ๋ ค ์žˆ๋‹ค.

๋ฆฌ์ŠคํŠธ๋Š” ๊ทธ ๊ฐ’์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Key๋กœ ์“ธ ์ˆ˜ ์—†๋‹ค.

 

 

 

โ–ถ ๋”•์…”๋„ˆ๋ฆฌ ๊ด€๋ จ ํ•จ์ˆ˜

 

-Key ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ(keys)

>>> a = {'name': 'Tom', 'phone': '01012345678', 'birth': '1010'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])

a.keys()๋Š” ๋”•์…”๋„ˆ๋ฆฌ a์˜ key๋งŒ์„ ๋ชจ์•„์„œ dict_keys ๊ฐ์ฒด๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

 

>>> for k in a.keys():
...     print(k)
...
name
phone
birth

dict_keys ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์ฐจ์ด๊ฐ€ ์—†์ง€๋งŒ, ๋ฆฌ์ŠคํŠธ ๊ณ ์œ ์˜ append, insert, pop, remove, sort ํ•จ์ˆ˜๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

โ˜…print(k)๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ

 

>>> list(a.keys())
['name', 'phone', 'birth']

dict_keys ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค.

 

 

-Value ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ(values)

>>> a.values()
dict_values(['Tom', '01012345678', '1010'])

Value๋งŒ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด values ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. values ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด dict_values ๊ฐ์ฒด๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

 

 

-Key, Value ์Œ ์–ป๊ธฐ(items)

>>> a.items()
dict_items([('name', 'Tom'), ('phone', '01012345678'), ('birth', '1010')])

items ํ•จ์ˆ˜๋Š” Key์™€ Value์˜ ์Œ์„ ํŠœํ”Œ๋กœ ๋ฌถ์€ ๊ฐ’์„ dict_items ๊ฐ์ฒด๋กœ ๋Œ๋ ค์ค€๋‹ค.

dict_values ๊ฐ์ฒด์™€ dict_items ๊ฐ์ฒด ์—ญ์‹œ dict_keys ๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

-Key: Value ์Œ ๋ชจ๋‘ ์ง€์šฐ๊ธฐ(clear)

>>> a.clear()
>>> a
{}

clear ํ•จ์ˆ˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ์•ˆ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ [ ], ๋นˆ ํŠœํ”Œ์„ ( )๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋นˆ ๋”•์…”๋„ˆ๋ฆฌ๋„ { }๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

 

 

-Key๋กœ Value ์–ป๊ธฐ(get)

>>> a = {'name': 'Tom', 'phone': '01012345678', 'birth': '1010'}
>>> a.get('name')
'Tom'
>>> a.get('phone')
'01012345678'

get(x) ํ•จ์ˆ˜๋Š” x๋ผ๋Š” Key์— ๋Œ€์‘๋˜๋Š” Value๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

 

>>> a = {'name': 'Tom', 'phone': '01012345678', 'birth': '1010'}
>>> print(a.get('nokey'))   ← None์„ ๋ฆฌํ„ดํ•จ
None
>>> print(a['nokey'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'nokey'

์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ Key ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  None์„ ๋Œ๋ ค์ค€๋‹ค.

 

>>> a.get('foo', 'bar')
'bar'

๋ฏธ๋ฆฌ ์ •ํ•ด๋‘” ๋””ํดํŠธ ๊ฐ’์„ ๋Œ€์‹  ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ์—๋Š” get(x, '๋””ํดํŠธ ๊ฐ’')์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๋‹ค.

 

 

-ํ•ด๋‹น Key๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ ์•ˆ์— ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•˜๊ธฐ(in)

>>> a = {'name': 'Tom', 'phone': '01012345678', 'birth': '1010'}
>>> 'name' in a
True
>>> 'email' in a
False

์ฐธ์ด๋ฉด True, ๊ฑฐ์ง“์ด๋ฉด False๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€