1.clear
clear的功能是对dict 的内容进行清除.没有任何的返回值
a={"person1":{"Andy":30},"person12":{"Lady":45}}
a.clear()
print(a)
打印结果
{}
2.copy
copy 分为两种类型 软copy 和硬copy,又什么区别呢, 为了
解释清楚,我用代码解释
a={"person1":{"Andy":30},"person12":{"Lady":45}}
new_a=a.copy()
print(new_a)
new_a['person1']["Andy"]=60
print(new_a)
print(a)
请看打印结果:
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 60}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 60}, 'person12': {'Lady': 45}}
软copy是指:
我们只是修改 new_a 的value值,但是我们发现 a 的值也改变了,
原理是:它并不是复制了一份,而只是把指针指向了original的值.
有小伙伴该说了硬copy 如何实现,我们要应用copy模块的 deepcopy方法.
import copy
a={"person1":{"Andy":30},"person12":{"Lady":45}}
new_a=copy.deepcopy(a)
print(new_a)
new_a['person1']["Andy"]=60
print(new_a)
print(a)
打印结果.
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 60}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
我们已经完成了 硬copy(深copy). 深copy 就是 复制一份,重新换个ID 如果操作 copy 的数据,不会影响
original的数据
3.fromkeys
请看下源码里面有详细的解释
@staticmethod # known case
def fromkeys(*args, **kwargs): # real signature unknown
""" Returns a new dict with keys from iterable and values equal to value. """
pass
看到装饰器应该明确这个是静态方法, 是可以直接用类名调用的,
看return 描述 返回的是一个新的dict ,并且 keys 和value 对应的关系.
这样说小伙伴一定很迷茫,老规矩上代码
a=["person1","person2"]
b=dict.fromkeys(a,"company")
print(b)
打印结果:
{'person1': 'company', 'person2': 'company'}
其中 company 一直会当做value, a 会当做key进行匹配.
4.get
get方法用到的地方很多,是解决key没有对应的value 报错的问题
例如
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a["person"])
打印结果:
KeyError: 'person'
如果解决这个问题呢, 看下边的代码:
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.get("person","bady"))
打印结果:
bady
如果取不到key 的值,就用后边的默认值**“body”.**
这个是巧妙的运用,避免报错,后边有个方法如果不存在也可以把值导入dict里面.
.
5.items
这个就不用介绍了吧,咱们经常用在for循环里,遍历我们的key ,value.
6.keys
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.keys())
打印结果:
dict_keys(['person1', 'person12'])
7.pop,popitem
太简单了直接上个例子就行,我也不解释了
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.pop("person1"))
print(a.popitem())
打印结果
{'Andy': 30}
('person12', {'Lady': 45})
8.setdefault
实际用的人很少,熟悉的人很少,我先介绍下吧.
先看源码,小伙伴应该具备的素质,不懂就翻看看,里面说明已经很清晰了
def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
""" D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
pass
通过上边我们发现它用了get方法,并且可以set 值.这个就比较厉害了 ,我们看例子吧
1.当key 存在的情况下.
a={"person1":{"Andy":30},"person12":{"Lady":45}}
print(a.setdefault("person12"))
print(a)
打印结果:
{'Lady': 45}
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
通过结果可以看出是返回的value值,和get 的功能一样,
2.当key 不存在的情况下,会set值 进入dict里面
a={"person1":{"Andy":30},"person12":{"Lady":45}}
defaut_value=a.setdefault("person3",30)
print(defaut_value)
print(a)
打印结果如下:
30
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}, 'person3': 30}
30 是返回的value 值,它也会进入dict 里面 .
9.update
下边是我再源码截取的一段话,通过这段话,
我们就很清晰知道,“E”栏位我们要求是iterable 就行,不能仅仅想到dict.
这点要注意.
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
这个方法目的是合并两个iterble 类型,例子如下
a={"person1":{"Andy":30},"person12":{"Lady":45}}
b={"person6":{"Andy":40},"person20":{"Lady":80}}
print(b.update(a))
print(b)
print(a)
打印结果
None
{'person6': {'Andy': 40}, 'person20': {'Lady': 80}, 'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}}
要清晰知道
1.a.update(b)是没有任何返回值
2.只是针对a进行update,b 不会有任何变化
3.a 会得到合并后的值.
4.a必须是个dict才能用update 方法
有小伙伴该说了,你说不仅仅只限制于dict ,那你请列出一个是不是dict例子
好吧,满足你的好奇心.
b={"person1":{"Andy":30},"person12":{"Lady":45}}
b.update(a=1,b=2)
print(b)
打印结果:
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}, 'a': 1, 'b': 2}
再送给你一个list 的类型的
b={"person1":{"Andy":30},"person12":{"Lady":45}}
a=[("maggie",20),("LIN",20)]
b.update(a)
print(b)
打印结果:
{'person1': {'Andy': 30}, 'person12': {'Lady': 45}, 'maggie': 20, 'LIN': 20}
总结:
这些方法我们要清晰知道他们如何操作的,合理利用.
并认识类型的重要性 比如iterble ,不要老是想着 list,tuple,dict.
还有再次提醒要翻看源码,里面写的很详细.