Loading

字典

一、字典的初识

数据类型的分类(可变与不可变)

可变(不可哈希)的数据类型: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),唯一

值:任意数据类型,对象

增删改查

字典的嵌套

posted @ 2021-04-09 23:11  Mr-Yang`  阅读(88)  评论(0编辑  收藏  举报