Last active
July 7, 2021 16:33
-
-
Save dimmy2000/38b7a0e63f8e03cb9209760c18b9e4cb to your computer and use it in GitHub Desktop.
Инициализация новых значений в словаре и defaultdict
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Инициализация новых значений | |
| if key not in dictionary: | |
| dictionary[key] = [] # инициализируем список | |
| dictionary[key].append(value) # изменяем список | |
| # или | |
| dictionary.setdefault(key, []).append(value) | |
| >>> from collections import defaultdict | |
| >>> d = defaultdict(int) | |
| >>> d['a'] += 5 | |
| >>> d['b'] = d['c'] + 10 | |
| >>> d | |
| defaultdict(<class 'int'>, {'a': 5, 'c': 0, 'b': 10}) | |
| a.setdefault(key, []).append… # новый список создаётся каждый раз | |
| # vs | |
| b[key].append… # новый список создаётся только тогда, когда ключ не будет найден | |
| # b это defaultdict(list) | |
| # b предпочтительнее когда затраты на создание значения по умолчанию слишком велики | |
| """Для редких случаев, когда и defaultdict не подходит, | |
| потому что нужно инициализировать значения по-разному, | |
| но не подходит и setdefault — новые значения неизменяемы | |
| и их не получится изменить по возвращаемой ссылке:""" | |
| x['count'] = x.get('count', 0) + 1 | |
| x['path'] = x.get('path', '') + '/' + dir |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment