python设置默认字典(setdefault collections.defaultdict)

    • setdefault
    • get
    • collections defaultdict

setdefault

dict.setdefault(key, default=None)

如果键不存在于字典中,将会添加新的键并将值设为默认值(改变了字典)。如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。

stu = [('wang', 1), ('zhang', 4), ('fu', 2), ('li', 3), ('fu', 7), ('wang', 2), ('wang', 8)]
stu_set = {}
for k, v in stu:
    stu_set.setdefault(k, set()).add(v)
for k, v in stu_set.items():
    print(k, v)
# output
zhang {4}
fu {2, 7}
li {3}
wang {8, 1, 2}

get

get()方法返回给定键的值。如果键不可用,则返回默认值(没有改变字典)。

dict.get(key, default=None)

collections defaultdict

defaultdict() 返回一个字典,会自动给每个键(key)赋一个初始值

collections.default([default_factory[, ...]])

使用工厂方法default_factory给所有key对应的value赋初始值,这些工厂方法有int(), long(), float(), complex(),str(), unicode(), basestring(),
list(), tuple(),dict(),bool()
set(), frozenset(),object(), classmethod()
staticmethod(),super(),property(),file()

import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(list)
for k, v in s:
    d[k].append(v)
list(d.items())

如果不用工厂方法,也可以使用自定义方法

counts = collections.defaultdict(lambda : [0, 0, 0])

例如,可以让每个vlaue的初始值为10

import collections
d = collections.defaultdict(lambda :10)
a = [('a', 1), ('b', 3), ('c', 2), ('b', 6), ('a', 7)]
for k, v in a:
    d[k] += v
for k, v in d.items():
    print(k, v)

# output
c 12
b 19
a 18

参考资料
1 collections defaultdict(默认字典)
2 Python collections.defaultdict() 与 dict的使用和区别
3 Python 字典(Dictionary) setdefault()方法
4 Python collections.defaultdict 笔记

你可能感兴趣的:(python设置默认字典(setdefault collections.defaultdict))