pythonic magic tips

1. setdefault 与 defaultdict:

  • setdefault:

    1
    2
    3
    4
    5
    result = {}
    data = [("p", 1), ("p", 2), ("p", 3),
    ("h", 1), ("h", 2), ("h", 3)]
    for (key, value) in data:
    result.setdefault(key, []).append(value)
  • defaultdict:

    1
    2
    3
    4
    5
    >>> result = defaultdict(list)
    >>> result
    defaultdict(<type 'list'>, {})
    >>> result['a']
    []

参数为 list,它就会构建一个默认value为list的字典,例如result[‘a’]的值默认就是list对象。

因此,前面这段代码可以改为:

1
2
3
4
5
6
7
from collections import defaultdict
result = defaultdict(list)
data = [("p", 1), ("p", 2), ("p", 3),
("h", 1), ("h", 2), ("h", 3)]

for (key, value) in data:
result[key].append(value)