Programming language/Python

[python] defaultdict

deo2kim 2020. 8. 29. 20:52
๋ฐ˜์‘ํ˜•

๐Ÿ“— defaultdict

defaultdict ๋Š” dict ์˜ ์„œ๋ธŒ ํด๋ž˜์Šค์ด๋‹ค. 

์ด๋ฆ„์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ๊ธฐ๋ณธ๊ฐ’(default)๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์นœ๊ตฌ์ด๋‹ค.

 

๐Ÿ”ต defaultdict

์ด๋Ÿฌํ•œ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์—†์• ์ฃผ๋Š”๊ฒŒ ๋ฐ”๋กœ defaultdict์ด๋‹ค.

defaultdict๋Š” ์ฒ˜์Œ ์„ ์–ธํ•  ๋•Œ ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

from collections import defaultdict

my_defaultdict = defaultdict(int)
print(my_defaultdict)  # defaultdict(<class 'int'>, {})
my_defaultdict = defaultdict(dict)
print(my_defaultdict)  # defaultdict(<class 'dict'>, {})
my_defaultdict = defaultdict(list)
print(my_defaultdict)  # defaultdict(<class 'list'>, {})

๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’๋“ค์ด๋‹ค. ๊ฐ๊ฐ defaultdict์˜ ํด๋ž˜์Šค ํƒ€์ž…์ด ์ง€์ •๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

int๋กœ ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด 0, dict๋‚˜ list๋Š” ๋น„์–ด์žˆ๋Š” dict {}๋‚˜ list []๊ฐ€ ๋œ๋‹ค.

 

๐Ÿ”น์กด์žฌํ•˜์ง€ ์•Š์€ ๊ฐ’์„ ํ˜ธ์ถœ ํ• ๋•Œ

my_defaultdict = defaultdict(int)
print(my_defaultdict['a'])  # 0
print(my_defaultdict)  # defaultdict(<class 'int'>, {'a': 0})

KeyError๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๋””ํดํŠธ๊ฐ’์ด 0์œผ๋กœ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”น๊ฐ’์„ ๋”ํ•ด์ค„ ๋•Œ

my_defaultdict = defaultdict(int)
my_defaultdict['a'] += 99
print(my_defaultdict)  # defaultdict(<class 'int'>, {'a': 99})

ํ‚ค๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๊ฐ’์„ ๋”ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”น ๋ฆฌ์ŠคํŠธ์—์„œ ํ™œ์šฉ

my_defaultdict = defaultdict(list)
my_defaultdict['a'].append('๋ฆฌ์ŠคํŠธ')
print(my_defaultdict)  # defaultdict(<class 'list'>, {'a': ['๋ฆฌ์ŠคํŠธ']})

๐Ÿ”ต dict

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์“ฐ๋Š” ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฒฝ์šฐ ์—†๋Š” ํ‚ค๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด KeyError๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

my_dict = {
    'a':'b'
}
print(my_dict['c'])

# KeyError: 'c'

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” get()์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ๊ฒƒ์ด๋‹ค.

my_dict = {
    'a':'b'
}
print(my_dict.get('c'))

# None

์ด๋ ‡๊ฒŒ ํ‚ค๊ฐ€ ์—†๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  None์ด ๋ฐ˜ํ™˜๋œ๋‹ค. 

 

๊ทธ๋ ‡์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋งŒ์•ฝ ๋”•์…”๋„ˆ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ํ‚ค๊ฐ’์— ๊ฐ’์„ ๋”ํ•˜๊ฑฐ๋‚˜ ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ๋Š” if๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

my_dict = {
    'a':'b'
}
if my_dict.get('c'):
    my_dict['c'] += 1
else:
    my_dict['c'] = 1

print(my_dict)

# {'a': 'b', 'c': 1}

 

๋ฐ˜์‘ํ˜•