seth在python中怎么用(深入理解Python的set和dict)
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: #<classdict_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])#不可变类型 ,可以作为dict的key 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中.
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!