字典方法

类似于列表,字典也已经提供了各种操作,方便对字典的使用。例如添加,移除,清空等。

clear方法

clear 方法就是清除字典中的所有项,这个是原地操作方法,没有返回值。使用示例代码:

# 字典 clear 方法 
x ={} 
y = x
x["key"]="value" 
print(x)
x={}
print(x) 
print(y)
print ("字典 clear 方法的使用 ")
x1 ={}
y1 = x1 
x1[ "key" ]="KeyValue" 
print (x1) 
print (y1) 
x1.clear()  # 字典清空
print(x1) 
print(y1)

在上面的代码中,x={},y=x,然后向x中添加元素:x[“key”]=“value” ,这个时候打印x,可以得到结果:{‘key’: ‘value’}。那么,如果把x重新设置为{},再打印x,y结果是什么呢?可以看到x清空了,但y的结果是:{‘key’: ‘value’},这就说明x、y已经指向了不同的内容。不能因为y = x就认为清空了x就清空了y。那么,继续,如果对x做clear操作,结果是什么呢?这个时候,x和y都是空的了:

{'key': 'value'}
{}
{'key': 'value'}
字典 clear 方法的使用
{'key': 'KeyValue'}
{'key': 'KeyValue'}
{}
{}

通过clear清空了字典,但由于x、和y指向了同一个字典,因此,结果二者都被清空了。实例结果:

copy方法

copy方法 (浅复制shallow copy) :返回一个具有相同键-值对的新字典。注意:copy 后,如果修改字典里面的值,原字典和新字典里面的值都会变化,如果只是操作字典,则相互不影响,这就是浅拷贝。示例方法:

# 字典下的 copy 方法
x = {"username" :"admin" ,"cars" :["benz" ,"audi" ]} 
y = x.copy() 
y[ "username" ] = "Bob" 
y[ "cars" ].remove( "audi" )
print(y) 
print(x)

结果:
{'username': 'Bob', 'cars': ['benz']} 
{'username': 'admin', 'cars': ['benz']}

可以看到,对y操作的时候,如果是字典值类型操作相互不影响,这就是修改y[ “username” ]之后,x不改变的原因;但如果修改引用类型的值,例如cars是个列表,对列表内容的操作将影响到x。

再来看一个实例,初始化一个新的student_info字典,里面有Alice和Bob两个键,其中Bob是一个列表类型,里面包含了两个元素,分别是电话号码和性别。

在代码45行,打印整个字典的内容,46行,对字典进行了浅拷贝,并赋值给copy_student_info变量。修改copy_student_info里面Alice键,将值设置为“1111”,打印结果,可以看到,改动只对copy_student_info生效,不影响原字典。但是,如果将copy_student_info中的Bob删除元素“5555”,再打印结果,就可以看到,原数组和拷贝数组都被改变了!

deepcopy方法

deepcopy 函数是一种深拷贝 ,不仅拷贝字典,同时将字典中元素进行依次深拷贝。不同于浅拷贝,深拷贝之后两个字典将不会再有任何关联。使用示例:

from copy import deepcopy
d = {}
d[“names”] = [“Alfred ”,“Bertrand ”]
c = d.copy() 
dc = deepcopy(d)
d[ “names”].append( “Bob ”)
print (c)
print (dc)

结果: 
{"names": ["Alfred","Bertrand","bob"]} 
{"names": ["Alfred","Bertrand"]}

以上代码,d是一个字典,names赋值为[“Alfred”,“Bertrand”],是一个列表,c是d的浅拷贝,dc是d的深拷贝,当修改原始字典,向names添加一个元素之后,打印c和dc。

可以看到,浅拷贝的c被影响,而深拷贝的dc不影响。代码执行:

get方法

get方法是个更宽松的访问字典项的方法。与下标访问功能类似,当功能更加强大。使用示例:

d = {"name" : "bob" }
print (d) # print(d["name"]) 运行该没问题
print (d.get("name", "no value or key" )) 
# print(d["sex"]) sex 不存在,运行该会报错 
print(d.get("sex","no value or key"))
结果:
{'name': 'bob'} {'name': 'bob'}
bob
no value or key

看上述代码,get方法有两个参数,第一个是需要访问的键,第二个是默认值,如果没有这个键,则返回一个默认值。d = {“name” : “bob” },在第三行,当访问name字段的时候,因为name字段存在于字典,因此,打印结果为bob, print(d.get("sex","no value or key")) 访问的sex键,因为不存在,所以返回了默认值:no value or key。

实例代码展示:

可以看到,获取已经存在的键,返回对应的值;如果不存在则返回默认值。而对于下标访问操作[],如果键不存在则直接报错了,这就是get方法带来的便利~

IT赶路人

专注IT知识分享