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是先把字典转换成一个列表,再去取值
④当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多