字典(dirc)
提到字典,不由的让我想起《新华字典》,上小学的时候几乎人手一本,当我们查字典的时候,可以按照拼音、偏旁和笔画来找到对应的汉字,python中的字典也是一样的,我们可以通过字典的key值查到字典的value,key和value组合起来就叫键值对
1 2
| mydic = {"name":"Carl","age":22,"address":"Chengdu"} print mydic
|
上述的”name”就叫做key,”Carl”叫做value,组合起来的”name”:”Carl”就叫键值对
创建字典
方法一
创建一个空的字典
创建有内容的字典
1 2
| mydic = {"name":"Carl","age":22,"address":"Chengdu"} print mydic
|
方法二
利用元组构建
1 2 3
| name = (["first","Google"],["second","Yahoo"]) website = dict(name) print websit
|
或者是这样创建
1 2
| websit = dict(first = "Google",second = "Yahoo") print websit
|
方法三
此方法不同于上面,需要用到fromkeys
1 2
| website = {}.fromkeys(("third","forth"),"facebook") print website
|
注意:此方法将生成一个新的字典
简单的添加、删除、判断(=、del、in)
1 2 3 4 5
| mydic["like"] = "music" print mydic del mydic["like"] print mydic print "\"like\" in mydic:\t" + str("like" in mydic)
|
注意:mydic[“like”] = “music” 如果key值存在则改变对应的value,如果不存在则添加此键值对到字典中
in 判断是否存在键值对,存在返回True,否则返回Flase
使用方法添加键值对(update)
1 2
| mydic.update([("pet","dog")]) print mydic
|
update的参数可以是列表元组,也可以是一个字典
使用方法删除键值对(pop、popitem)
1 2 3 4
| print mydic.pop("pet") print mydic print mydic.popitem() print mydic
|
pop(key)删除键值对 如果key不存在则会报错,返回删除的value
popitem()不加参数,随机删除一个并将被删除的value返回,如果字典为空则报错
使用方法获取key对应的value
get
1 2 3
| print mydic.get("like") print mydic.get("dislike","English") print mydic["like"]
|
get只有一个key的参数,如果这个key存在则返回对应的value,如果不存在返回None
get包含两个参数第一个是key,第二个是value,如果key存在返回对应的value,如果不存在则返回第二个参数
第三种数组形式的获取,如果不存在则报错
setdefault
1 2 3 4 5
| print mydic.setdefault("like") print mydic.setdefault("pet") print mydic print mydic.setdefault("joy","switch") print mydic
|
setdefault单参数和get一样,key不存在返回None,但是setdefault会将key:None添加到原字典中
setdefault两个参数时,如果key不存在则返回对二个参数,同时将这对键值对添加到原字典中
使用方法判断key是否存在
has_key
1 2
| print mydic.has_key("pet") print mydic.has_key("dislike")
|
存在返回True,否则返回False
字典的复制
“=”和copy
1 2 3 4 5 6 7
| print id(mydic) yourdic = mydic print yourdic print id(yourdic) herdic = mydic.copy() print herdic print id(herdic)
|
“=”是假复制,地址不变
“copy”是真复制,地址改变
注:id()是查看变量地址的方法
copy和deepcopy
copy() 是浅复制,只能复制基础数据类型(int,str等),对于复杂的复合类型(list,dict等)只是复制了它们的引用,具体看下面的例子:
1 2 3 4 5 6 7 8 9
| mydic["like"] = ["c","c++","python","java"] print id(mydic) print mydic hisdic = mydic.copy() print id(hisdic) print hisdic hisdic["like"].remove("java") print mydic print hisdic
|
可以看到改变了原字典,copy得到的字典也发生了变化
要完全拷贝的话需要用到 deepcopy,这个方法需要额外添加copy库:
1 2 3 4 5 6 7
| import copy
deepcopydic = copy.deepcopy(mydic) print deepcopydic mydic["like"].insert(3,"java") print mydic print deepcopydic
|
清空字典的三种方式
1 2 3 4 5 6
| deepcopydic.clear() print deepcopydic hisdic = {} print hisdic del mydic print mydic
|
clear()将字典清空,内存还在占用内容为空
del 将内存释放
“= {}” 指向一个新的内容为空的字典的地址,之前的还在成为没人指向的垃圾,python有自动回收垃圾功能不用担心