使用setdefault方法处理字典缺失值

本文介绍了Python字典的setdefault()方法,该方法在访问字典键时,若键不存在,则会添加键并设置默认值。setdefault()与get()的区别在于,当键不存在时,setdefault()会添加键到字典中。不仅可以设置默认值为None,还可以设置为列表或字典等复杂类型。setdefault()在处理字典集合时,特别是在需要确保键存在或初始化默认值的情景下,非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在处理字典集合的时候经常会去访问字典的键,由于场景有很多种比如有时候访问的字典键并不存在,那么如何很好的处理缺失值呢,这里要提到的就是字典的**setdefault()**方法,setdefault()方法其实也类似于字典里的get()方法。

get()方法会判断字典的键是否存在,如果存在则返回值否则不做任何返回也不会导致任何异常,当然用get(key, default=None)其实也可以设定默认值,一旦设置了默认值,那么在没有找到键的情况就返回设定的默认值。

而用setdefault()方法直接访问字典键会返回对应键值,但是当键不存在的时候,新的键会在字典中被添加进字典中,并且默认设置为None值,这就是与get()的唯一不同之处。

test = {'name':"anders"}
test.setdefault('name')

# 输出如下:
# 'anders'

test = {'name':"anders"}
test.setdefault('age')
print(test)

# 输出如下:
# {'name': 'anders', 'age': None}

setdefault的方法语法是dict.setdefault(key, default=None),所以自然可以在使用setdefault()方法时设定默认值,如果本身就存在对应的键那就返回原有键的值,否则就会添加我们设置的字典新键和键值。

test = {'name':"anders"}
# 我们试着用setdefault方法访问name键,并附带mary键值。
test.setdefault('name', 'mary')
print(test)

# 输出如下:
# {'name': 'anders'}

因为我们本身在该字典中存在name键所以依然返回原有的键的值内容为anders。

对于所设定的默认值,不仅仅是一种单类型,我们还可以设置一个list列表。

test = {'name':"anders"}
# 我们给默认值设置为[]列表,随后使用列表的append方法添加列表值。
test.setdefault('nickname', []).append('apple')
test.setdefault('nickname', []).append('orange')
print(test)

# 输出如下:
# {'name': 'anders', 'nickname': ['apple', 'orange']}

甚至也可以将默认值设置为dict字典类型。

test = {'name':"anders"}
# 我们给默认值设置为{}字典,随后使用比较特殊的方式[] = ""的方式定义。
test.setdefault('nickname', {})["name1"] = "apple"
test.setdefault('nickname', {})["name2"] = "orange"
print(test)

# 输出如下:
# {'name': 'anders', 'nickname': {'name1': 'apple', 'name2': 'orange'}}

在将默认值设定为字典类型的时候写法有些稍许注意的是定义方式以类似**[“name1”] = “apple”**这样的方式添加新值。

在平时编码环境中set default()方法的作用还是非常有用的,比如下面这个例子是用来遍历当前存在的字典列表,如果不存在就添加进去,顺便把键值按照顺序数值来分配。遇到这种情况时就可以考虑使用setdefault()方法了。

dict_strings = {'puppy': 1, 'kitten': 2, 'doggy':3, 'weasel':4}

strings = ('puppy', 'kitten', 'doggy', 'weasel',
           'anderson', 'jason')

count = 1
for kw in strings:
    # setdefault的默认值设置为循环的次数,当提取的字典键不存在的时候把当前的count值设置为默认值。
    dict_strings.setdefault(kw, count)
    # count变量用于计算当前循环键的次数
    count = count + 1
    
print(dict_strings)

# 输出如下:
# {'puppy': 1, 'kitten': 2, 'doggy': 3, 'weasel': 4, 'anderson': 5, 'jason': 6}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值