| by msbeta | No comments

Python字典(dict)设置默认值

Python中的collections.defaultdict([default_factory[, ]])在设置的字典key第一次出现的时候,自动调用default_factory方法创建一个默认的对象。这个类在实际使用中非常有用,可以帮助我们简化不少问题。

1.合并键值(Key)相同的键值对

如下所示,我们可以把键值(Key)相同的Value合并到一个List中。

from collections import defaultdict

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

d = defaultdict(list)
for k, v in s:
    d[k].append(v)

s_d = sorted(d.items())

print(s_d)

程序输出:

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

2. 统计字符出现的次数

如下代码所示,当每个字母首次遇到时,defaultdict会查询失败,然后会调用int()来提供一个整数 0 作为默认值,后续再出现的时候就可以通过自增操作实现对字母的计数。

from collections import defaultdict

s = 'mississippi'

d = defaultdict(int)
for k in s:
    d[k] += 1

sorted(d.items())

[('i', 4), ('m', 1), ('p', 2), ('s', 4)]

3. 自定义default_factory

除了Python内置的default factory函数,我们还可以自定义factory函数。

from collections import defaultdict

def constant_factory(value):
    return lambda: value

d = defaultdict(constant_factory('unset'))

d["zhangsan"] = "Beijing"
d["lisi"] = "Nanjing"

for k, v in d.items():
    print(k + " from " + v)
	
print("wangwu from " + d["wangwu"])

程序输出:

lisi from Nanjing
zhangsan from Beijing
wangwu from unset

参考材料

https://docs.python.org/zh-cn/3/library/collections.html#collections.defaultdict

发表评论