์ฝ๋ฉํ ์คํธ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๊ณต๋ถํ๋ค๊ฐ ๋ค๋ฅธ๋ถ์ ์ฝ๋๋ฅผ ๋ณด๊ฒ๋์๊ณ defaultdict๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด๊ณ ๊ถ๊ธํ์ฌ ๊ณต๋ถ๋ฅผ ํ๊ฒ ๋์๋ค.
python์ collections ๋ชจ๋์๋ defaultdict๋ผ๋ ๊ธฐ๋ฅ์ด ์๋ค.
defaultdict๋ ์ด๋ฆ ๊ทธ๋๋ก ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ ๋์ ๋๋ฆฌ์ธ๋ฐ ๊ธฐ๋ณธ ๋์ ๋๋ฆฌ์ ์ด๋ ํ ์ฐจ์ด๊ฐ ์๋์ง ์์๋ณด์.
defaultdict()๋ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋๋ dictํด๋์ค์ ์๋ธํด๋์ค์ด๋ค.
์๋ํ๋ ๋ฐฉ์์ ๊ธฐ๋ณธ ๋์ ๋๋ฆฌ์ ๊ฑฐ์ ๋์ผํ๋ฐ defaultdict()๋ ์ธ์๋ก ์ฃผ์ด์ง ๊ฐ์ฒด(default-factory)์ ๊ธฐ๋ณธ๊ฐ์ ๋์ ๋๋ฆฌ๊ฐ์ ์ด๊น๊ฐ์ผ๋ก ์ง์ ํ ์ ์๋ค.
-> ์ด๊ฒ ๋ฌด์จ๋ง์ด๋๋ฉด ์ผ๋ฐ์ ์ธ ๋์ ๋๋ฆฌ์ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ฝ์ ํ์ง ์์ key๋ฅผ ํธ์ถํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
>>> n_dict = dict()
>>> n_dict["a"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
“a” ๋ผ๋ ํค์ ๊ฐ์ ๋ฃ์ด์ค์ ์ด ์๊ธฐ๋๋ฌธ์, ๋น์ฐํ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ด์ setdefault๋ฅผ ์ฌ์ฉํด ํธ์ถ๊ณผ ๋์์ ์ ์ธ๋ ๊ฐ๋ฅํ๋ค.
>>> n_dict = dict()
>>> n_dict.setdefault("a", 0)
0
>>> n_dict
{'a': 0}
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ๋ค์ง ํจ์จ์ ์ด์ง ์๋ค.
์ด๋ defaultdict๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค.
defaultdict๋ฅผ ํ์ฉํด ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ๊ฐ์ ‘int’ ๋ก ์ ์ธํด์ฃผ๊ณ , ๊ธฐ์กด์ ์๋ key๋ฅผ ํธ์ถํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํด๋น key๊ฐ 0์ผ๋ก ์๋ ์ด๊ธฐํ๋๋ค.
-> ๊ธฐ๋ณธ๊ฐ์ int๋ฟ๋ง ์๋๋ผ ๋ฆฌ์คํธ, set(์งํฉ) ๋ฑ์ผ๋ก ์ด๊ธฐํ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
>>> from collections import defaultdict
>>> d_dict = defaultdict(int)
>>> d_dict["a"]
0
>>> d_dict
defaultdict(<class 'int'>, {'a': 0})
default๊ฐ์ผ๋ก list๋ฅผ ์ฃผ์์๋ >>> list_dict = defaultdict(list) - ๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด []๋ก ์ด๊ธฐํ
default๊ฐ์ผ๋ก set์ ์ฃผ์์๋ >>> list_dict = defaultdict(set) - ๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด set()์ผ๋ก ์ด๊ธฐํ
defaultdict๋ ์ธ๋ถํจ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ import๊ณผ์ ์ด ํ์ํ๋ค.
>>> from collections import defaultdict
์ด๋ฟ๋ง ์๋๋ผ ๋ฏธ๋ฆฌ ์ ์ธํ์ง ์์ key์ ๊ฐ์ ๋ํด์ฃผ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
>>> d_dict = defaultdict(int)
>>> d_dict["a"] += 10
10
>>> d_dict
defaultdict(<class 'int'>, {'a': 10})
lambda ์์ ์ฌ์ฉํด ์ํ๋ ์ด๊ธฐ๊ฐ์ ์ง์ ํ ์๋ ์๋ค.
>>> d_dict = defaultdict(lambda: 'default value')
>>> d_dict["a"]
'default value'
https://itholic.github.io/python-defaultdict/
ํด๋น ๋ด์ฉ์ ์์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์๋ค.
'Skill Up๐ฅ > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
input(), sys.stdin.readline ์ ๋ฆฌ (0) | 2022.10.31 |
---|---|
join ํจ์ ์ ๋ฆฌ(๋ฌธ์์ด ํฉ์น๊ธฐ) (0) | 2022.10.06 |
๋์ ๋๋ฆฌ ์๋ฃํ ์ ๋ฆฌ (0) | 2022.05.03 |
Python ์ ๋ ฌ ํจ์ sort,sorted ์ ๋ฆฌ (0) | 2022.03.07 |