Python随笔7

Posted bigbigtong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python随笔7相关的知识,希望对你有一定的参考价值。

字典:

字典是Python中内置的一种可变容器模型,可以把它理解为map,通过key-value的方式存储任意类型的数据数据;创建方式为dir={"key1":value1,"key2":"value2"...}key和value之间用冒号隔开,多个ke、value之间用逗号隔开

值得注意的是字典中的键是唯一的,值可以不唯一

dict()方法:

dict()可以把元组或者列表转换为字典

s1=[("Name","Tom"),("age",18)]
print("#将列表转换为字典")
print(dict(s1))
print("#将元组转换为字典")
s2=(["Sex","male"],["Loc","BJ"])
print(dict(s2))

结果:

#将列表转换为字典
{Name: Tom, age: 18}
#将元组转换为字典
{Sex: male, Loc: BJ}

字典中的key、value的简单查询、增加、删除(使用字典名[key名])

d1={"Name":"Tom","Age":20,"Hobby":"Football"}
#查找字典中已有的key
print(d1["Name"])
#向字典中增加key、value
d1["Loc"]="BJ"
print(d1)
#改变字典中的key的value
d1["Loc"]="SZ"
print(d1)
#获取字典中键值对的数量
print(len(d1))
#删除字典中的键值对
del d1["Loc"]
print(d1)

 

结果:

Tom
{Name: Tom, Age: 20, Hobby: Football, Loc: BJ}
{Name: Tom, Age: 20, Hobby: Football, Loc: SZ}
4
{Name: Tom, Age: 20, Hobby: Football}

 

get()方法:

如果字典中没有某个key,直接使用字典名[key名]的方式查询会报错

此时可以使用get()方法查看

d1={"Name":"Tom","Age":20,"Hobby":"Football"}
print(d1.get("Loc","key or value not defined"))
print(d1.get("Name"))

结果:

key or value not defined
Tom

clear()方法:

清除字典中所有项

x={}
y=x
print(x)
print(y)
x["Key"]="Value"
print(x)
print(y)
x.clear()
print(x)
print(y)

结果:

{}
{}
{Key: Value}
{Key: Value}
{}
{}

x、y指向同一块内存地址,当x或者y使用了clear()方法之后,清除了字典中所有的项,那么x、y都为空

 

copy()和deepcopy():

深度复制deepcopy():在内存里面是开辟一块新的内存,放置复制过来的数据,所以原来的对象和复制之后新创建的对象指向的是不同的内存空间,两个对象相互独立,不会相互影响

浅复制copy():我的理解是只要原对象和复制之后的对象数据指向同一块内存地址,就是浅复制。对于列表来讲,列表list有一个地址,列表里面的元素各自有各自的地址,当我们对列表进行增删改的时候,列表的地址不变,变化的是里面的元素的地址。

例子:

这段代码可以看出列表里面的元素无论怎么变化,列表的物理地址不变

x=[1,2,3,4]
print(x)
print(id(x))
x[0]=5
print(x)
print(id(x))
x.append(6)
print(x)
print(id(x))

结果:

[1, 2, 3, 4]
11628672
[5, 2, 3, 4]
11628672
[5, 2, 3, 4, 6]
11628672

例子:

下面的例子中,原字典和复制之后的字典name开始都是指向Tom的,但是无论是x或者y的name一旦发生改变,改变的那个的name就不再指向Tom但是不影响另外一个;hobby都是指向列表,这个列表无论是

增删改都不会改变列表的物理地址,所以x、y一个改变就会影响到另外一个;字典里新增的key-value也不会影响另外一个字典,因为另一个字典并不会指向这个新增的key-value

x={"name":"Tom","hobby":["swimming","running"]}
y=x.copy()
print(y)
y["name"]="Jerry"
print(x)
print(y)
print("--------------------------")
y["hobby"].append("drinking tea")
print(x)
print(y)
print("--------------------------")
y["hobby"].remove("running")
print(x)
print(y)
print("--------------------------")
y["loc"]="BJ"
print(x)
print(y)

结果:

{name: Tom, hobby: [swimming, running]}
{name: Tom, hobby: [swimming, running]}
{name: Jerry, hobby: [swimming, running]}
--------------------------
{name: Tom, hobby: [swimming, running, drinking tea]}
{name: Jerry, hobby: [swimming, running, drinking tea]}
--------------------------
{name: Tom, hobby: [swimming, drinking tea]}
{name: Jerry, hobby: [swimming, drinking tea]}
--------------------------
{name: Tom, hobby: [swimming, drinking tea]}
{name: Jerry, hobby: [swimming, drinking tea], loc: BJ}

 理解了copy(),深度复制就比较简单了

 

keys():

以列表的形式返回字典中的key

x={
    "Tom":{
        "age":12,
        "loc":"beijing"
    },
    "Jerry":{
        "age":18,
        "loc":"shanghai"
    },
    "Allen":{
        "age":20,
        "loc":"shenzheng"
    }
}
print(x.keys())

 

结果:

dict_keys([Tom, Jerry, Allen])

 

 

pop():

从字典中弹出指定key的项,字典会删除这个项

x={"Name":"Tom","Age":20,"Loc":"SZ"}
print(x.pop("Loc"))
print(x)

 

结果:

SZ
{Name: Tom, Age: 20}

 

popitem():

随机返回并删除字典中的一对键值对,一般是末尾的一对

x={"Name":"Tom","Age":20,"Loc":"SZ","Hobby":"ball"}
print(x.popitem())
print(x)

 

结果:

(Hobby, ball)
{Name: Tom, Age: 20, Loc: SZ}

 

setdefaults():

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
如果键k在字典D中,那么返回D["k"]对应的值,如果k不是D中的键,则创建一个新的键值对k:d
例子
x={"Name":"Tom","Age":20,"Loc":"SZ","Hobby":"ball"}
print(x.setdefault("Age"))
x.setdefault("Class","Python")
print(x)

 

结果:

20
{Name: Tom, Age: 20, Loc: SZ, Hobby: ball, Class: Python}

 

update():

x.update(y),将字典y添加到x中,x更新,y不变

x={"Name":"Tom","Age":20,"Loc":"SZ","Hobby":"ball"}
y={"Class":"Python"}
x.update(y)
print(x)
print(y)

 

结果:

{Name: Tom, Age: 20, Loc: SZ, Hobby: ball, Class: Python}
{Class: Python}

 





以上是关于Python随笔7的主要内容,如果未能解决你的问题,请参考以下文章

Python随笔:PyCharm使用技巧及常用快捷键

计算机基础系列一:计算机硬件 7月11日课堂随笔及作业

Error: Python executable “H:devpython3.10python.EXE“ is v3.10.0, which is not supported by gyp.(代码片段

python随笔

2020-1-7学习随笔

计算机基础系列一:网络基础和python基础(变量和程序交互)7月13和14日课堂预习/随笔/作业