1.字典的概念

Python中的字典是另一种可变容器模型,且可存储任意类型对象。键值使用冒号分割,你可以看成是一串json。
字典和列表类似,也是可变序列,不过和列表不同,它是无序的可变序列,保存的内容是以键值对(key:value)形式存放的 字典的每个键值之间用冒号:分隔,每个键值对之间用,隔开,整个字典包含在{ }中
dict = {key1:value1,key2:value2}
2.字典的主要特征
- 通过键而不是通过索引来读取
- 字典是任意对象的无序集合
- 字典是可变的,可以随意嵌套
- 字典的键必须唯一
- 字典的键必须不可变
3.创建字典的三种方法
# 第一种方法
dic1 = {'name':'ming','age':'18'}
# 第二种方法
dic2 = dict(name='ming',age='18')
# 第三种方法
dic3 = dict([('name','ming'),('age','18')])
print(dic3,dic2,dic1)
执行结果:
![]()
4.字典常用方法
4.1 clear() 清除
定义
clear()方法清空字典中的所有元素(返回空字典)
# 清空dic1字典中的所有元素
dic1 = {'name':'ming','age':'18'}
dic1.clear()
print(dic1)
执行结果:
![]()
4.2 copy()复制
定义
copy()方法返回字典的副本(复制字典)
# 复制dic1字典
dic1 = {'name':'ming','age':'18'}
res = dic1.copy()
print(res)
执行结果:
![]()
4.3 get() 返回指定键的值
定义
get()方法返回指定键的值
# 使用get方法返回"name"的值
dic1 = {'name':'ming','age':'18'}
print(dic1.get("name"))
执行结果:
ming
4.4 keys() 返回键
定义
返回字典里的所有键
返回dic1字典的所有键
dic1 = {'name':'ming','age':'18'}
print(dic1.keys())
执行结果:
dict_keys(['name', 'age'])
4.5 values() 返回值
定义
返回字典的所有值
# 返回dic1字典的所有值
dic1 = {'name':'ming','age':'18'}
print(dic1.values())
执行结果:
dict_values(['ming', '18'])
4.6 items() 返回键值对
定义
返回字典的所有键值对
# 返回dic1字典的所有键值对
dic1 = {'name':'ming','age':'18'}
print(dic1.items())
执行结果:
dict_items([('name', 'ming'), ('age', '18')])
4.7 del() 、pop() 删除
del定义
删除字典元素
# 删除dic1字典的"name"的键
dic1 = {'name':'ming','age':'18'}
del dic1["name"]
print(dic1)
执行结果:
{'age': '18'}
pop定义
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
dic1 = {"name":"yaoyao","name1":"mingming","name2":"shunshun"}
dic1.pop("name1")
print(dic1)
执行结果:
{'name': 'yaoyao', 'name2': 'shunshun'}
popitem定义
返回并删除字典中最后一个(后进先出原则)键值对
dic1 = {"name":"yaoyao","name1":"mingming","name2":"shunshun"}
dic1.popitem()
print(dic1)
执行结果:
{'name': 'yaoyao', 'name1': 'mingming'}
4.8 zip() 打包
定义
zip()方法将键值打包成一个字典
dic1 = {'name','age'}
dic2 = {"yaoyao","15"}
print(dict(zip(dic1,dic2)))
执行结果:
{'age': '15', 'name': 'yaoyao'}
4.9 update()、setdefault() 修改
update定义
一次添加多个键值对,同样key值存在时更新key对应的value、key值不存在是添加key:value对;
dic1 = {"name":"yaoyao","name1":"mingming","name2":"shunshun"}
dic1.update({"name":"quan"})
print(dic1)
执行结果:
{'name': 'quan', 'name1': 'mingming', 'name2': 'shunshun'}
setdefault()定义
key值存在时,直接返回对应的value;key值不存在时,将key: default_value键值对添加进字典;
default_value值可省略,默认是None;
dic1 = {"name":"yaoyao","name1":"mingming","name2":"shunshun"}
dic1.setdefault("name","guang")
dic1.setdefault("n3","lingling")
print(dic1)
执行结果:
{'name': 'yaoyao', 'name1': 'mingming', 'name2': 'shunshun', 'n3': 'lingling'}
4.10其他简单操作
in ,not in 成员判断;
len(dict) 判断字典长度;
test_dict = {'name': 'll', 'age': 90}
print('name' in test_dict)
print(len(test_dict))
# 字典没有累加累乘操作
执行结果:
True
2
5. 多级嵌套字典
av_catalog = {
"欧美":{
"www.yqqq.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
执行结果:
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
6. 循环打印输出
av_catalog = {
"欧美":{
"www.yqqq.com": ["很多免费的,世界最大的","质量一般"],
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
# 默认用第一种
for i in av_catalog:
print(i,av_catalog[i])
print("\n")
# 第二种是将字典转换成列表,当字典内的键值对比较多时,转换列表这个动作将消耗大量的内存,不推荐
for k,y in av_catalog.items():
print(k,y)
执行结果:
欧美 {'www.yqqq.com': ['很多免费的,世界最大的', '质量一般']}
日韩 {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}
大陆 {'1024': ['全部免费,真好,好人一生平安', '服务器在国外,慢']}
欧美 {'www.yqqq.com': ['很多免费的,世界最大的', '质量一般']}
日韩 {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}
大陆 {'1024': ['全部免费,真好,好人一生平安', '服务器在国外,慢']}