字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
创建字典:
1 dic1={'name':'alex','age':36,'sex':'male'} 2 dic2=dict((('name','alex'),)) 3 print(dic1) 4 print(dic2)
对应操作:
1 增
dic3={} dic3['name']='alex' dic3['age']=18 print(dic3) #{'name': 'alex', 'age': 18} a=dic3.setdefault('name','yuan') b=dic3.setdefault('ages',22) print(a,b) #alex 22 setdefault() 没有填充,有返回键所对应的值 print(dic3) #{'name': 'alex', 'age': 18, 'ages': 22}
2 查
dic3={'name': 'alex', 'age': 18} # print(dic3['name']) 返回 alex # print(dic3['names']) 报错 没有“names”这个键 # # print(dic3.get('age',False)) # 18 返回age对应的值 # print(dic3.get('ages',False)) #返回 False 没有键值对并返回 print(dic3.items()) #dict_items([('name', 'alex'), ('age', 18)]) print(dic3.keys()) #dict_keys(['name', 'age']) print(dic3.values()) #dict_values(['alex', 18]) print('name' in dic3)# py2: dic3.has_key('name') 返回True print(list(dic3.values())) #['alex', 18]
3 改
1 dic3={'name': 'alex', 'age': 18} 2 3 dic3['name']='alvin' 4 dic4={'sex':'male','hobby':'girl','age':36} 5 dic3.update(dic4) 6 print(dic3) #{'name': 'alvin', 'age': 36, 'sex': 'male', 'hobby': 'girl'} 有键 则更新 没有则补充
4 删
dic4={'name': 'alex', 'age': 18,'class':1} #dic4.clear() #print(dic4) #{} 清空字典 #del dic4['name'] #print(dic4) #{'age': 18, 'class': 1} 删除name所对应的值 #print(dic4.pop('age')) #18 pop()有返回值 #print(dic4) #{'name': 'alex', 'class': 1} 删除以后剩余 #a=dic4.popitem() #随机删除 #print(a,dic4) # ('class', 1) {'name': 'alex', 'age': 18} #del dic4 #print(dic4) """ Traceback (most recent call last): File "C:UserszhangshuaiDesktopdic.py", line 16, in <module> print(dic4) NameError: name 'dic4' is not defined """
5 其他操作以及涉及到的方法
5.1 dict.fromkeys
d1=dict.fromkeys(['host1','host2','host3'],'Mac') print(d1) #{'host1': 'Mac', 'host2': 'Mac', 'host3': 'Mac'} d1['host1']='xiaomi' print(d1) #{'host1': 'xiaomi', 'host2': 'Mac', 'host3': 'Mac'} ####### d2=dict.fromkeys(['host1','host2','host3'],['Mac','huawei']) print(d2) #{'host1': ['Mac', 'huawei'], 'host2': ['Mac', 'huawei'], 'host3': ['Mac', 'huawei']} d2['host1'][0]='xiaomi' print(d2) #{'host1': ['xiaomi', 'huawei'], 'host2': ['xiaomi', 'huawei'], 'host3': ['xiaomi', 'huawei']}
5.2 d.copy() 对字典 d 进行浅复制,返回一个和d有相同键值对的新字典
5.3 字典的嵌套
1 av_catalog = { 2 "欧美":{ 3 "www.youporn.com": ["很多免费的,世界最大的","质量一般"], 4 "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"], 5 "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"], 6 "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"] 7 }, 8 "日韩":{ 9 "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"] 10 }, 11 "大陆":{ 12 "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"] 13 } 14 } 15 16 av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来" 17 print(av_catalog["大陆"]["1024"]) 18 #ouput 19 ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
5.4 sorted(dict) : 返回一个有序的包含字典所有key的列表
1 dic={5:'555',2:'222',4:'444'} 2 print(sorted(dic)) #[2, 4, 5] 返回一个有序的包含字典所有key的列表
5.5 字典的遍历
dic5={'name': 'alex', 'age': 18} for i in dic5: print(i,dic5[i]) #name alex age 18 for items in dic5.items(): print(items) #('name', 'alex') ('age', 18) for keys,values in dic5.items(): print(keys,values) #name alex age 18
还用我们上面的例子,存取这个班学生的信息,我们如果通过字典来完成,那:
dic={'zhangsan':{'age':23,'sex':'male'}, '李四':{'age':33,'sex':'male'}, 'wangwu':{'age':27,'sex':'women'} }