Home

Tags

DefaultDict в Python

2012-11-27 python collections defaultdict

Часто в задачах сбора информации или построения отчетов полезно использовать словарь в котором элементы существуют изначально и имеют определенную структуру, в python для этих целей можно использовать defaultdict, он позволяет писать код короче, этот код

d = {}
if key not in d: d[key] = value
else: d[key] += value

аналогичен этому
d = defaultdict(int)
d[key] += value


Другие примеры использования defaultdict в python
# coding: utf8

from collections import defaultdict

# int
d = defaultdict(int)
d['a'] += 3
print d

# list
d = defaultdict(list)
d['a'].append(3)
d['a'] += [5,7]
print d

# set
d = defaultdict(set)
d['a'].add(3)
d['a'].add(3)
print d

# Произвольная структура
d = defaultdict(lambda :{ 'name':'', 'count':0 })
d['a']['count'] += 3
d['a']['title'] = 'test'
d['b']['count'] += 5
print d

# Чтение значений по умолчанию
d = defaultdict(lambda :'<missing>')
d['a'] = 'test'
print '%(a)s %(b)s %(c)s' % d

Результат
defaultdict(<type 'int'>, {'a': 3})
defaultdict(<type 'list'>, {'a': [3, 5, 7]})
defaultdict(<type 'set'>, {'a': set([3])})
defaultdict(<function <lambda> at 0xb733b764>, {'a': {'count': 3, 'name': '', 'title': 'test'}, 'b': {'count': 5, 'name': ''}})
test <missing> <missing>