python中defaultdict 的用法

发布时间 2023-09-12 15:46:31作者: 海_纳百川

创建一个具有空张量作为默认值的defaultdict,可以这样做:

from collections import defaultdict
import torch

# 创建一个defaultdict,其中默认值是一个空张量
a = defaultdict(lambda: torch.tensor([]))

# 添加一些示例数据
a['key1'] = torch.tensor([1, 2, 3])
a['key2'] = torch.tensor([4, 5, 6])

# 访问一个不存在的键,将返回空张量作为默认值
default_value = a['key3']  # default_value将是一个空张量

 

defaultdict:

当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,如:

这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,下面会说

如何使用defaultdict
defaultdict接受一个工厂函数作为参数,如下来构造:

from collections import 

dict =defaultdict( factory_function)

这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:

 

 
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)
a = d.items()
print(a)
b = sorted(d.items())
print(b)

"""
结果:
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
"""

当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表,list.append()会将值添加进新列表;再次遇到相同的键时,list.append()将其它值再添加进该列表。
这种方法比使用dict.setdefault()更为便捷,dict.setdefault()也可以实现相同的功能。