python3:dict常用的方法

版权声明:转载 或者复制请标注来源 https://blog.csdn.net/qq_34979346/article/details/83654603

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.

还有再次提醒要翻看源码,里面写的很详细.

猜你喜欢

转载自blog.csdn.net/qq_34979346/article/details/83654603
今日推荐