字典

字典是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 ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
View Code

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'}    
     } 
原文地址:https://www.cnblogs.com/zerozs/p/8127754.html