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': ['全部免费,真好,好人一生平安', '服务器在国外,慢']}