字典
一、字典的初识
数据类型的分类(可变与不可变)
可变(不可哈希)的数据类型:list dict set
不可变(可哈吉)的数据类型:str bool int tuple (对原对象本身不可变)
列表可以存储大量的数据,但数据之间的关联性不强
列表的查询速度比较慢。数量越大查询越慢
出现了另一个新的容器型数据类型:dict
字典:{}括起来,以键值对形式存储的容器型数据类型:
dic = {
'小明':
{'name': '小明', 'age': 18, 'sex': '男'},
'名单':
['小红', '小猪', '小严']
}
键必须是不可变的数据类型:int,str 不然后一个就会把前一个给覆盖
dic = {1: 'a', 1: 'b', 2: 'c'}
print(dic) # {1: 'b', 2: 'c'}
值可以是任意数据类型,对象。
字典3.5版本之前包括3.5是 无序的。
字典在3.6会按照初次建立字典的顺序排列,学术上不认为是有序的。
字典在3.7以后都是有序的。
字典的优点:查询速度非常快,存储关联性的数据
字典的缺点:以空间换时间。
二、字典的创建方式
方式一:
dic = dict((('one', 1), ('tow', 2), ('stree', 3)))
print(dic) # {'one': 1, 'tow': 2, 'stree': 3}
方式二:
dic = dict(noe=1, tow=2, three=3)
print(dic) # {'noe': 1, 'tow': 2, 'three': 3}
方式三:最正规的方式(官方)
dic = dict({'noe': 1, 'tow': 2, 'three': 3})
print(dic) # {'noe': 1, 'tow': 2, 'three': 3}
字典的合法性,键必须是不可变的
dic = {[1, 2]: 'ab', 1: 19}
print(dic)
# 输出
dic = {[1, 2]: 'ab', 1: 19}
TypeError: unhashable type: 'list'
三、字典的使用(增删改查)
增
直接增加,有则改之,无则增加
dic = {'name': '小明', 'age': 18}
dic['sex'] = '男' # {'name': '小明', 'age': 18, 'sex': '男'}
dic['age'] = 23 # {'name': '小明', 'age': 23}
setdefault: 有则不变,无则增加
dic = {'name': '小明', 'age': 18}
dic.setdefault('age', 45) # {'name': '小明', 'age': 18}
dic.setdefault('set', '男') # {'name': '小明', 'age': 18, 'sex': '男'
删除
pop:按照键值去删除键值对,返回对应的值,并且将字典当中的键值对删除
dic = {'name': '小明', 'age': 18}
dic.pop('age') # 字典删除后为{'name': '小明'} 并返回18
dic.pop('sex') # 没有此键就会报错
dic.pop('sex', '没有此键') # 设置第二个参数,无论字典中是否有此键值,返回第二个参数的内容
clear:清空,内容清空
del:和pop一样但没有就报错,没有第二个参数,建议用pop
改
直接改:
dic = {'name': '小明', 'age': 18}
dic['age'] = 55
print(dic) # {'name': '小明', 'age': 55}
查
get()
dic = {'name': '小明', 'age': 18}
ll = dic.get('age') # 返回查询的值
ls = dic.get('sex', '没有此键') # 设置第二个参数,字典中没有此键值,返回第二个参数的内容
print(ll) # 18
print(ls) # 没有此键
keys() values() items() 三个特殊的
keys() 加载所以的键放在一个特殊的数字类型里去,可以转化成列表,也可以直接for循环
dic = {'name': '小明', 'age': 18}
print(dic.keys()) # dict_keys(['name', 'age'])
list(dic.keys()) # 转换成一个列表
values() 和keys一致,加载所以的键放在一个特殊的数字类型里去,可以转化成列表,也可以直接for循环
items()以元组的形式返回所有的键值对,可for循环遍历
dic = {'name': '小明', 'age': 18}
print(dic.items()) # dict_items([('name', '小明'), ('age', 18)])
#-----------------------------------------
# 使用元组的拆包
for i in dic.items():
print(i)
('name', '小明')
('age', 18)
#---------------------------------------------
for key, value in dic.items():
print(key, value)
name 小明
age 18
一行代码将 a 和 b 的值互换
a = 11
b = 19
a, b = b, a # 19, 11
四、字典的嵌套
dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38}, ],
'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'}
}
# 1. 获取汪峰的名字。
ll = dic.get('name')
print(ll) # 汪峰
# 2.获取这个字典:{'name':'国际章','age':38}。
ll = dic.get('wife')[0]
print(ll) # {'name': '国际章', 'age': 38}
# 3. 获取汪峰妻子的名字。
ll = dic.get('wife')[0].get('name')
print(ll) # 国际章
# 4. 获取汪峰的第三个孩子名字。
ll = dic.get('children').get('girl_three')
print(ll) # 顶顶
总结:
字典:查询速度快,数据关联性强
键不可变的数据类型(str int),唯一
值:任意数据类型,对象
增删改查
字典的嵌套
本文来自博客园,作者:Mr-Yang`,转载请注明原文链接:https://www.cnblogs.com/XiaoYang-sir/p/14639240.html