python设置默认字典(setdefault 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 笔记

defaultdictdict的区别在于它们处理缺失键(key)的方式不同。在使用dict时,如果要访问一个不存在的键,会抛出KeyError异常。而使用defaultdict时,如果要访问一个不存在的键,会使用default_factory所指定的默认值来初始化该键的值,并将其添加到字典中。这个default_factory可以是一个函数,也可以是一个类型。 举个例子来说,假设我们有一个defaultdict,它的default_factory被设置为list,那么当我们访问一个不存在的键时,会自动地创建一个空列表作为该键的值。而对于普通的dict,如果我们访问一个不存在的键,就会触发KeyError异常。 另外需要注意的是,defaultdict和普通的dict在赋值时也有区别。对于defaultdict,如果我们直接对一个不存在的键赋值,它会自动创建该键并将其值设置为我们所指定的默认值。而对于普通的dict,如果我们直接对一个不存在的键赋值,它会覆盖掉该键原本的值。 总结来说,defaultdict相比于普通的dict,更方便处理缺失键的情况,因为它能够自动地为缺失键提供默认值,并且不会抛出KeyError异常。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python 3 collections.defaultdict()dict的使用和区别](https://blog.csdn.net/weixin_30725467/article/details/97111675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值