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

๐ŸŒ€ ํŒŒ์ด์ฌ Python

ํŒŒ์ด์ฌ - Dictionary

by Meteora_ 2021. 6. 28.
728x90

1. Dictionary (dict)

Dictionary๋Š” "ํ‚ค(Key) - ๊ฐ’(Value)" ์Œ์„ ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ปฌ๋ ‰์…˜์ด๋‹ค.

Dictionary๋Š” ํ”ํžˆ Map ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ์šฐ๋Š”๋ฐ, ํ‚ค(Key)๋กœ ์‹ ์†ํ•˜๊ฒŒ ๊ฐ’(Value)์„ ์ฐพ์•„๋‚ด๋Š” ํ•ด์‹œํ…Œ์ด๋ธ”(Hash Table) ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

ํŒŒ์ด์ฌ์—์„œ Dictionary๋Š” "dict" ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. Dictionary์˜ ํ‚ค(key)๋Š” ๊ทธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” Immutable ํƒ€์ž…์ด์–ด์•ผ ํ•˜๋ฉฐ, Dictionary ๊ฐ’(value)์€ Immutable๊ณผ Mutable ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Dictionary์˜ ํ‚ค(key)๋กœ ๋ฌธ์ž์—ด์ด๋‚˜ Tuple์€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, ๋ฆฌ์ŠคํŠธ๋Š” ํ‚ค๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†๋‹ค.

Dictionary์˜ ์š”์†Œ๋“ค์€ Curly Brace "{...}" ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ๊ฐ ์š”์†Œ๋“ค์€ "Key:Value"" ์Œ์œผ๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์š”์†Œ๊ฐ„์€ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์š”์†Œ๊ฐ€ ์—†๋Š” ๋นˆ Dictionary๋Š” "{}"์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•œ๋‹ค. ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์•„ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” "Dictionary๋ณ€์ˆ˜[ํ‚ค]"์™€ ๊ฐ™์ด ํ‚ค๋ฅผ ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

17. dictionary(๋”•์…”๋„ˆ๋ฆฌ) - ํŒŒ์ด์ฌ - ๊ธฐ๋ณธ์„ ๊ฐˆ๊ณ  ๋‹ฆ์ž! (wikidocs.net)

 

#dictionary == haspMap == json

dic = {
    "name":"์ฃผ์ง€ํ›ˆ",
    "age":"25",
    "hobby":["๋…์„œ","๊ฒŒ์ž„","์Šคํฌ์ธ "],
    "address":"์„œ์šธ์‹œ",

}

print(dic)
print(dic.keys())
print(dic.values())
print(dic.items())


print(dic['name'])
print(dic['hobby'][1]) #๊ฒŒ์ž„

#์ˆ˜์ •
dic['name'] = '์„ฑ์ถ˜ํ–ฅ'
print(dic['name'])

#์ถ”๊ฐ€
dic['height'] = 175
print(dic)

#์‚ญ์ œ
del dic['address']
print(dic)

if 'name' in dic:
    print(dic['name'])
else:
    print('์กด์žฌํ•˜์ง€์•Š๋Š” key๊ฐ’์ž…๋‹ˆ๋‹ค')

val = dic.get("age")
print(val)

for key in dic:
    print(key, ":", dic[key])
1
2
3
4
scores = {"์ฒ ์ˆ˜": 90, "๋ฏผ์ˆ˜": 85, "์˜ํฌ": 80}
v = scores["๋ฏผ์ˆ˜"]   # ํŠน์ • ์š”์†Œ ์ฝ๊ธฐ
scores["๋ฏผ์ˆ˜"] = 88  # ์“ฐ๊ธฐ
print(t)

ํŒŒ์ด์ฌ์˜ Dictionary๋Š” ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์œ„์˜ ์˜ˆ์ œ์™€ ๊ฐ™์ด {...} ๋ฆฌํ„ฐ๋Ÿด(Literal)์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋˜ํ•œ dict ํด๋ž˜์Šค์˜ dict() ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. dict() ์ƒ์„ฑ์ž๋Š” (์•„๋ž˜ ์ฒซ๋ฒˆ์งธ ์˜ˆ์ฒ˜๋Ÿผ) Key-Value ์Œ์„ ๊ฐ–๋Š” Tuple ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„๋“ค์ด๊ฑฐ๋‚˜ (๋‘๋ฒˆ์งธ ์˜ˆ์ฒ˜๋Ÿผ) dict(key=value, key=value, ...) ์‹์˜ ํ‚ค-๊ฐ’์„ ์ง์ ‘ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
# 1. Tuple List๋กœ๋ถ€ํ„ฐ dict ์ƒ์„ฑ
persons = [('๊น€๊ธฐ์ˆ˜', 30), ('ํ™๋Œ€๊ธธ', 35), ('๊ฐ•์ฐฌ์ˆ˜', 25)]
mydict = dict(persons)


age = mydict["ํ™๋Œ€๊ธธ"]
print(age)   # 35


# 2. Key=Value ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋ถ€ํ„ฐ dict ์ƒ์„ฑ
scores = dict(a=80, b=90, c=85)
print(scores['b'])  #90

2. ์ถ”๊ฐ€,์ˆ˜์ •,์‚ญ์ œ,์ฝ๊ธฐ

Dictionary ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” "Dictionary[ํ‚ค]=์ƒˆ๊ฐ’"์™€ ๊ฐ™์ด ํ•ด๋‹น ํ‚ค ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค. Dictionary์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ˆ˜์ • ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ("๋งต[์ƒˆํ‚ค]=์ƒˆ๊ฐ’") ์ƒˆ ํ‚ค์— ์ƒˆ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค. Dictionary ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” "del ์š”์†Œ"์™€ ๊ฐ™์ด ํ•˜์—ฌ ํŠน์ • ์š”์†Œ๋ฅผ ์ง€์šด๋‹ค.

1
2
3
4
5
6
scores = {"์ฒ ์ˆ˜": 90, "๋ฏผ์ˆ˜": 85, "์˜ํฌ": 80}
scores["๋ฏผ์ˆ˜"] = 88   # ์ˆ˜์ •
scores["๊ธธ๋™"] = 95   # ์ถ”๊ฐ€
del scores["์˜ํฌ"]
print(scores)
# ์ถœ๋ ฅ {'์ฒ ์ˆ˜': 90, '๊ธธ๋™': 95, '๋ฏผ์ˆ˜': 88}

Dictionary์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ for ๋ฃจํ”„๋Š” scores ๋งต์œผ๋กœ๋ถ€ํ„ฐ ํ‚ค๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ํ‚ค๋Š” ๋žœ๋คํ•˜๊ฒŒ ๋ฆฌํ„ด๋˜๋Š”๋ฐ, ์ด๋Š” ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์†์„ฑ์ด๋‹ค. ๊ฐ ํ‚ค์— ๋”ฐ๋ฅธ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” scores[key]์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

1
2
3
4
5
scores = {"์ฒ ์ˆ˜": 90, "๋ฏผ์ˆ˜": 85, "์˜ํฌ": 80}


for key in scores:
    val = scores[key]
    print("%s : %d" % (key, val))

3. ์œ ์šฉํ•œ dict ๋ฉ”์„œ๋“œ

Dictonary์™€ ๊ด€๋ จํ•˜์—ฌ dict ํด๋ž˜์Šค์—๋Š” ์—ฌ๋Ÿฌ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ๋‹ค. dict ํด๋ž˜์Šค์˜ keys()๋Š” Dictonary์˜ ํ‚ค๊ฐ’๋“ค๋กœ ๋œ dict_keys ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , values()๋Š” Dictonary์˜ ๊ฐ’๋“ค๋กœ ๋œ dict_values ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
scores = {"์ฒ ์ˆ˜": 90, "๋ฏผ์ˆ˜": 85, "์˜ํฌ": 80}


# keys
keys = scores.keys()
for k in keys:
    print(k)


# values
values = scores.values()
for v in values:
    print(v)

 

dict์˜ items()๋Š” Dictonary์˜ ํ‚ค-๊ฐ’ ์Œ Tuple ๋“ค๋กœ ๊ตฌ์„ฑ๋œ dict_items ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ dict_items ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” list()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” dict_keys, dict_values ๊ฐ์ฒด์—๋„ ๊ณตํžˆ ์ ์šฉ๋œ๋‹ค.

1
2
3
4
5
6
7
8
scores = {"์ฒ ์ˆ˜": 90, "๋ฏผ์ˆ˜": 85, "์˜ํฌ": 80}


items = scores.items()
print(items)
# ์ถœ๋ ฅ: dict_items([('๋ฏผ์ˆ˜', 85), ('์˜ํฌ', 80), ('์ฒ ์ˆ˜', 90)])


# dict_items๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ
itemsList = list(items)

dict.get() ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š”๋ฐ, ์ด๋Š” Dictionary[ํ‚ค]๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค. ๋‹จ, Dictionary[ํ‚ค]๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ‚ค๊ฐ€ ์—†์„ ๋•Œ ์—๋Ÿฌ(KeyError)๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐ˜๋ฉด, get()์€ ํ‚ค๊ฐ€ Dictionary์— ์—†์„ ๊ฒฝ์šฐ None์„ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ ๋” ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  get()์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํ•ด๋‹น ํ‚ค๊ฐ€ Dictionary์— ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๊ณ  Dictionary[ํ‚ค]๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ํ‚ค๊ฐ€ Dictionary์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜์ง€ ์œ„ํ•ด์„œ๋Š” ๋ฉค๋ฒ„์‰ฝ์—ฐ์‚ฐ์ž in ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
scores = {"์ฒ ์ˆ˜": 90, "๋ฏผ์ˆ˜": 85, "์˜ํฌ": 80}
v = scores.get("๋ฏผ์ˆ˜")  # 85
v = scores.get("๊ธธ๋™")  # None
v = scores["๊ธธ๋™"]      # ์—๋Ÿฌ ๋ฐœ์ƒ


# ๋ฉค๋ฒ„์‰ฝ์—ฐ์‚ฐ์ž in ์‚ฌ์šฉ
if "๊ธธ๋™" in scores:
    print(scores["๊ธธ๋™"])


scores.clear()  # ๋ชจ๋‘ ์‚ญ์ œ
print(scores)

dict.update() ๋ฉ”์„œ๋“œ๋Š” Dictionary ์•ˆ์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํƒ€๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๊ฐฑ์‹ ํ•˜๋Š”๋ฐ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ ์ฒ˜๋Ÿผ, update() ์•ˆ์— Dictionary ํ˜•ํƒœ๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํƒ€์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ํ•ด๋‹น ๋ฐ์ดํƒ€๋“ค์ด update() ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ํ•œ๊บผ๋ฒˆ์— ์ˆ˜์ •๋œ๋‹ค.

1
2
3
4
persons = [('๊น€๊ธฐ์ˆ˜', 30), ('ํ™๋Œ€๊ธธ', 35), ('๊ฐ•์ฐฌ์ˆ˜', 25)]
mydict = dict(persons)


mydict.update({'ํ™๋Œ€๊ธธ':33,'๊ฐ•์ฐฌ์ˆ˜':26})

๋Œ“๊ธ€