Skip to content

Instantly share code, notes, and snippets.

@dimmy2000
Last active July 7, 2021 16:33
Show Gist options
  • Select an option

  • Save dimmy2000/38b7a0e63f8e03cb9209760c18b9e4cb to your computer and use it in GitHub Desktop.

Select an option

Save dimmy2000/38b7a0e63f8e03cb9209760c18b9e4cb to your computer and use it in GitHub Desktop.
Инициализация новых значений в словаре и defaultdict
# Инициализация новых значений
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