深入理解Python的set和dict
发布时间:2025-09-26 11:09:41

常用的dict操作
引言
clear(): 清空字典
copy(): 返回一份浅拷贝
fromkeys(): 将可迭代对象中的每一个元素作为key和同一个value拼成字典
get(): 根据key返回value,如果没有相应的键值对,则返回None,也可以指定默认返回值,与索引访问相比,无异常。
items():返回dict_items类型,支持迭代,以元组的形式组织键值
setdefault(): 获取key对应的value值,首先调用get()。如果没有这个键值对,则添加它
update(): 由键对元组成的合并字典或可迭代对象
使用案例
#1.clear()
d={name:"MetaTian",age:"22"}
d.clear()
#2.copy()
new_dict=d.copy()
new_dict["age"]=18
print(new_dict)
print(d)
#resutl:
#{'age':18,'name':'MetaTian'}
#{'age':'22','name':'MetaTian'}
#3.fromkeys()
d=dict.fromkeys(range(3),"MetaTian")
print(d)
#result:
#{0:'MetaTian',1:'MetaTian',2:'MetaTian'}
#4.get()
print(d.get(2))
print(d.get(3))
print(d.get(3,"null"))
#result:
#MetaTian
#None
#null
#5.items()
print(type(d.items()))
print(d.items())
#result:
#<class'dict_items'>
#dict_items(0,'MetaTian'),(1,'MetaTian'),(2,'MetaTian')])
#6.setdefault()
d={}
value=d.setdefault("name","MetaTian")#如果没有name这个key,则添加
print(value,d)
#result:
#MetaTian{'name':'MetaTian'}
#7.update()
d1={1:"a"}
d2={2:"b"}
d1.update(d2)
d2.update([(3,"c"),(4,"d")])
print(d1)
print(d2)
#result:
#{1:'a',2:'b'}
#{2:'b',3:'c',4:'d'}set和frozenset
引言
set是可变集合,frozenset是不可变集合
集中元素无序,不重复
使用案例
"""
通过set(Iterable)构建可变集合对象
通过frozenset通过(Iterable)构建不可变集合对象
"""
s=set("12345666")
fs=frozenset(['a','b','c','a'])#不可变类型,可作为dictkey
print(s)
print(fs)
#result:
#{'6','1','4','5','3','2'}
#frozenset({'b','a','c'})
"""
在set中添加元素
add()
update()
"""
s1,s2=set("123"),set("234")
s1.update(s2)
s2.add('5')
print(s1)
print(s2)
#result:
#{'1','2','3','4'}
#{'2','3','5','4'}
"""
集合的运算
-差
&交
|并
"""
s1,s2=set("123"),set("234")
print(s1-s2)
print(s1&s2)
print(s1|s2)
#result:
#{'1'}
#{'2','3'}
#{'3','1','2','4'}实现dict和set的原理
引言
dict和set的搜索性能远远大于list
dict和set底层通过散列表存储,因此dict的key也需要可哈希,不可变的对象是可哈希
哈希的原理.
以字典为例.
在存储之前,Key的值应该通过哈希函数计算,以获得存储索引。如果结果已经使用,则应处理冲突,重新计算,然后存储
通过实现_____________hash__()可以存储在dict和set中.
所以,特定的存储顺序和添加元素的顺序可能与.
下一篇 一个例子解释python装饰器
