当前位置: 代码网 > it编程>前端脚本>Python > python中setdefault方法以及底层原理分析

python中setdefault方法以及底层原理分析

2026年03月25日 Python 我要评论
1、setdefault 方法 功能setdefault是python中字典的一个方法, 它用于在字典中查找指定键 如果键存在, 则返回对应的值; 如果键不存在,则在字典中添加该键,并将其值设置为指定

1、setdefault 方法 功能

setdefault是python中字典的一个方法, 它用于在字典中查找指定键 如果键存在, 则返回对应的值; 如果键不存在,则在字典中添加该键,并将其值设置为指定的默认值

2、setdefault 用法详解

dict.setdefault(key, default_value)

其中,key为要查找或添加的键,default_value为键不存在时设置的默认值。

如果省略default_value,则默认为none。

3、setdefault 底层原理

  • 底层实现:

在python中,字典是一种无序的键值对集合,它的底层实现是基于哈希表。

哈希表是一种根据关键字直接访问内存位置的数据结构,通过哈希函数将关键字映射到对应的内存位置。

python中的字典是通过拉链法(chaining)实现的哈希表。

拉链法是指每个哈希桶(bucket)(下方有解释)中存储一个链表,哈希值相同的键值对会被 插入到同一个链表中。当需要查找或插入一个键值对时,先计算出该键的哈希值,然后根据哈希值找到对应的哈希桶,再在该哈希桶对应的链表中查找或插入键值对。

下面是setdefault方法的底层实现步骤:

  • 计算要查找或添加的键的哈希值,找到对应的哈希桶。
  • 遍历哈希桶对应的链表,查找是否有键与要查找或添加的键相同。
  • 如果找到了相同的键,则返回该键对应的值。
  • 如果没有找到相同的键,则在链表头部添加一个新的键值对,并将键的值设置为默认值。
  • 返回默认值作为该键的值。

上面中什么是哈希桶?

​哈希桶是哈希表中存储元素的容器,它是一个固定大小的数组,每个元素都是一个链表或其他容器。

哈希桶的大小是根据哈希表的负载因子(load factor)和哈希表中元素数量来计算的。

在python中,哈希桶是一个由哈希表实现的动态数组,每个哈希桶中存储的是一条链表,链表中的每个节点都是一个键值对。

当需要查找或插入一个键值对时,先计算出该键的哈希值,然后根据哈希值找到对应的哈希桶,

再在该哈希桶对应的链表中查找或插入键值对。

  • 哈希桶的大小通常是一个质数,这是为了保证哈希函数的均匀性和哈希表的性能。
  • 如果哈希桶的大小比较小,会导致哈希冲突(hash collision)的概率增大,从而降低哈希表的性能;
  • 如果哈希桶的大小比较大,会浪费内存空间。

在python中,哈希桶的大小是动态调整的,当哈希表中元素数量达到一定阈值时,python会自动扩容哈希表,增加哈希桶的数量,在保证哈希函数均匀性和哈希表性能的同时,提高哈希表的存储容量。

总之,哈希桶是哈希表中存储元素的容器,它是哈希表实现的关键之一,直接影响哈希表的性能和存储容量。

setdefault方法的底层实现步骤:

  • 1、计算要查找或添加的键的哈希值,找到对应的哈希桶。
  • 2、遍历哈希桶对应的链表,查找是否有键与要查找或添加的键相同。
  • 3、如果找到了相同的键,则返回该键对应的值。
  • 4、如果没有找到相同的键,则在链表头部添加一个新的键值对,并将键的值设置为默认值。
  • 5、返回默认值作为该键的值。​

底层实现的过程示例:

d = {"a": 1, "b": 2}

# 查找键'c'
if 'c' in d:
    value = d['c']
else:
    d['c'] = 3
    value = 3

# value = 3

# 修改键'a'的默认值
if 'a' in d:
    value = d['a']
else:
    d['a'] = 3
    value = 3

# value = 1

手动模拟了setdefault方法的实现过程。当查找键'c'时,因为该键不存在,所以通过添加键值对的方式将键'c'的值设置为默认值3。

当查找键'a'时,因为该键已经存在,所以返回键'a'对应的值1,而不修改其默认值。

总之,setdefault方法是python字典的一个有用的方法,它可以方便地查找和添加键值对。

对于大型的数据处理应用程序来说,使用哈希表来实现字典可以极大地提高程序的效率和性能。

4、setdefault 示例方法

4.1 添加一个新键和默认值

d = {"a": 1, "b": 2}
d.setdefault("c", 3)
print(d)  # 输出:{'a': 1, 'b': 2, 'c': 3}
# 字典d本来并没有键为'c'的元素,使用setdefault方法可以添加一个新的键'c'和默认值3

4.2 修改已有键的默认值

d = {"a": 1, "b": 2}
d.setdefault("a", 3)
print(d)  # 输出:{"a": 1, "b": 2}
# 字典d已经有键'a',使用setdefault方法仍然会返回键'a'对应的值1,而不会修改它的默认值。

4.3 可以省略默认值参数

d = {"a": 1, "b": 2}
d.setdefault("c")
print(d)  # 输出:{"a": 1, "b": 2, "c": none}
# 省略了默认值参数,此时默认值为none

4.4 在字典中嵌套一个列表

d = {}
d.setdefault("list", []).append(1)
d.setdefault("list", []).append(2)
print(d)  # 输出:{"list": [1, 2]}
# 使用setdefault方法为字典d添加一个键'list',并将其值设置为一个空列表。然后,使用列表的append方法向该列表中添加元素1和2。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com