day2-字典
一、简述
字典是Python中的又一种数据结构,它是通过key-value的数据类型,跟我们小时候用的新华字典差不多,通过key去访问value
二、语法
1、语法
stu_info = {
"zhangsan":23,
"lisi":18,
"qigao":18
}
2、特性
①字典是无序的
②字典是通过key去访问value(元素不存在重复)
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#通过key值访问对应的元素
>>> stu_info["qigao"]
18
三、基本用法
1、增加
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#新增
>>> stu_info["wanger"] = 30
#输出结果
>>> stu_info
{'wanger': 30, 'lisi': 18, 'zhangsan': 23, 'qigao': 18}
2、修改
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#修改'qigao'对应的value值,由18改为23
>>> stu_info["qigao"] = 23
#输出
>>> stu_info
{'wanger': 30, 'lisi': 18, 'zhangsan': 23, 'qigao': 23}
3、删除(del、pop、popitem)
①del
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> del stu_info['qigao']
#结果输出
>>> stu_info
{'zhangsan': 23, 'lisi': 18}
注:如果是del stu_info的话,则是删除stu_info这个变量
②pop(k)
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#删除时给出提示
>>> stu_info.pop("qigao")
18
#输出结果
>>> stu_info
{'zhangsan': 23, 'lisi': 18}
③popitem()
随机删除字典中的一个元素
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#随机删除的元素
>>> stu_info.popitem()
('lisi', 18)
#输出结果
>>> stu_info
{'zhangsan': 23, 'qigao': 18}
4、查找
①key值在字典中存在
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> "qigao" in stu_info #标准用法,在Python3和Python2.7都可以用
True
以上这种用法,在Python3和Python2.7都可以用,但是下面这种情况只能在Python2.7上用,Python3已经废除了
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.has_key("qigao") #Python2.7的用法,在Python3中不可使用
True
②get(k)
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#存在则返回对应的value
>>> print(stu_info.get("qigao"))
18
#不存在返回None
>>> print(stu_info.get("wanger"))
None
③通过k获取value
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#存在key返回value
>>> stu_info["qigao"]
18
#不存在key提示报错
>>> stu_info["wanger"]
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'wanger'
小结:get(k)不存在key值,则返回None,通过key直接访问会报错,所以建议推荐用get(k)这个方法获取value
5、多级字典嵌套及操作
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
#ouput
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
四、其他用法
1、values()
返回字典中所有value,生成一个列表
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.values()
#输出
dict_values([23, 18, 18])
2、keys()
返回字典中所有key,生成一个列表
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.keys()
#输出结果
dict_keys(['zhangsan', 'qigao', 'lisi'])
3、setdefault(k,v)
setdefault()表示去取字典中的key,如果取不到,则设置新值,相反如果取到,则返回原有默认值
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
#设置不存在的key
>>> stu_info.setdefault("wanger",25)
25
>>> stu_info
#输出结果
{'wanger': 25, 'zhangsan': 23, 'qigao': 18, 'lisi': 18}
#设置存在的key
>>> stu_info.setdefault("qigao",23)
18
>>> stu_info
#输出结果
{'wanger': 25, 'zhangsan': 23, 'qigao': 18, 'lisi': 18}
4、update(dict)
update()是把两个字典合并成一个新的字典,中间有交叉的key,更新替换成新值,没有交叉就直接创建
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> yhd = {"qigao":23,1:2,3:4}
>>> stu_info.update(yhd)
>>> stu_info
#输出
{1: 2, 'lisi': 18, 3: 4, 'qigao': 23, 'zhangsan': 23}
注:以后提到更新(update),就是直接原有的字典或者列表上修改,添加(上面的例子就是在stu_info基础上更新的)
5、items()
把字典转换成列表
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.items()
dict_items([('lisi', 18), ('qigao', 18), ('zhangsan', 23)])
6、fromkeys(list,默认值)
初始化一个字典
>>> dict.fromkeys(["zhangsan","wanger"],1)
{'wanger': 1, 'zhangsan': 1}
注:创建多层会有浅copy的作用,所以不建议使用,只需要做了解即可
7、clear()
清空字典
>>> stu_info = {"zhangsan":23,"lisi":18,"qigao":18}
>>> stu_info.clear()
#输出
>>> stu_info
{}
五、循环字典
方法1、
for key in info:
print(key,info[key])
方法2、
#方法2
for k,v in info.items(): #会先把dict转成list,数据量大时莫用
print(k,v)
小结:
①方法1的效率比方法2的效率高很多
②方法1是直接通过key取value
③方法2是先把字典转换成一个列表,再去取值
④当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多

浙公网安备 33010602011771号