py defaultdict和namedtuple.md

"""
defaultdict()defaultdict和namedtuple()是collections模块里面2个很实用的扩展类型。
一个继承自dict系统内置类型,
一个继承自tuple系统内置类型。
在扩展的同时都添加了额外的的特性,而且在特定的场合都很实用。
"""
from collections import defaultdict, namedtuple


def test_defaultdict():
    s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

    # 设置value默认类型
    d = defaultdict(list)
    # 会有默认值,所以可以append
    for k, v in s:
        d[k].append(v)

    print(list(d.items()))

    d_2 = {}
    for k, v in s:
        # 可以设置默认值
        d_2.setdefault(k, []).append(v)
    print(list(d_2.items()))

    d_3 = {}
    for k, v in s:
        # 没有默认值,会报错
        d_3[k].append(v)
    print(d_3.items())


def test_namedtuple():
    TPoint = namedtuple('TPoint', ['x', 'y'])

    # 生成对象
    t = [10, 20]
    p = TPoint._make(t)
    print(p)

    p = TPoint(x=11, y=22)
    print(p)

    # 替换值
    p = p._replace(x=44, y=33)
    print(p)

    # 将字典数据转换成namedtuple类型
    d = {'x': 44, 'y': 55}
    p = TPoint(**d)
    print(p)

    # 常用使用示例
    # CityRecord = namedtuple('City', 'Name, Country, Dsitrict, Population')
    # for city in map(CityRecord._make, cur.fetchall()):
    #     print(city.Name, city.Population)

仅供参考
目录