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