一、字典
列表缺点:1)列表可以存储大量的数据,但数据之间关联性不强: 2)列表的查询速度比较慢
容器型数据类型:dict
按照可变与不可变的数据类型的分类:
不可变(可哈希)的数据类型:int,str,bool(布尔值),tuple(元组)。
可变(不可哈希)的数据类型:list(列表),dict(字典),set(集合)。
字典:{}括起来,以键值对形式存储的容器型数据类型:
dic = {'张三': #键值对
{'name': '张四', 'age': 18, 'sex': '男'},
'catr': #键值对
['大牛', '卡罗拉', '霸道']
}
print(dic)
注:
- 键必须是不可变的数据类型:int,str, 值可以是任意数据类型和对像,唯 一的。
- 字典3.5版之前(包含3.5)是无序的
- 字典3.6x会按照初建立字典的顺序排列
- 字典3.7以后都是有序的。
字典的缺点:以空间换时间
字典的优点:查询速度非常快,存储关联性的数据
1、字典的创建
方法一:
dic = dict((('one',1),('two',2),('three',3)))
print(dic)
输出结果:{'one': 1, 'two': 2, 'three': 3}
方法二:
dic = dict(one=1, two=2, three=3)
print(dic)
输出结果:{'one': 1, 'two': 2, 'three': 3}
方法三:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic)
输出结果:{'one': 1, 'two': 2, 'three': 3}
2、增
通过键值对直接增加
dic = {'name': 'mrxiong', 'age': 18}
dic['weight'] = 75 # 没有weight这个键,就增加键值对
print(dic) # {'name': 'mrxiong', 'age': 18, 'weight': 75}
dic['name'] = 'barry' # 有name这个键,就成了字典的改值
print(dic) # {'name': 'barry', 'age': 18, 'weight': 75}
setdefault
dic = {'name':'mrxiong','age':30,}
dic.setdefault('heigth',175) # 没有height此键,则添加
print(dic)
dic.setdefault('name','barry') # 有此键则不变
print(dic)
#它有返回值
dic = {'name': '太白', 'age': 18}
ret = dic.setdefault('name')
print(ret) # 太白
3、删
pop 通过key删除字典的键值对,有返回值,可设置返回值。
dic = {'name':'mrxiong','age':30,}
ret = dic.pop('name') #有返回值
print(dic)
当我们不知道字典中有没有这键值,我们可以通过pop实现,如果没有键值时不对字典进行删除并返回设置的参数提示
dic = {'name':'mrxiong','age':30,}
ret = dic.pop('abcc','没有此键') #有返回值
print(ret)
print(dic)
clear()清空
dic = {'name':'mrxiong','age':30,}
dic.clear()
print(dic)
del
通过键删除键值对
dic = {'name':'mrxiong','age':30,}
del dic['name']
print(dic)
4、改
通过键值对直接改
dic = {'name': 'mrxiong', 'age': 30}
dic['name'] = 'barry'
print(dic)
输出结果:
{'name': 'barry', 'age': 30}
dic = {'name': 'mrxiong', 'age': 30}
dic.update(ses='男',height=175)
print(dic)
输出结果:
{'name': 'mrxiong', 'age': 30, 'ses': '男', 'height': 175}
dic = {'name': 'mrxiong', 'age': 30}
dic.update(name='barry')
print(dic)
输出结果:
{'name': 'barry', 'age': 30}
dic = {'name': 'mrxiong', 'age': 30}
dic.update([('one', 1), ('two', 2)])
print(dic)
输出结果:
{'name': 'mrxiong', 'age': 30, 'one': 1, 'two': 2}
5、查
get
dic = {'name': 'mrxiong', 'age': 30, 'hobby_list': ['直男', '开车', '玩']}
v = dic.get('hobby_list')
print(v)
输出结果:['直男', '开车', '玩']
dic = {'name': 'mrxiong', 'age': 30, 'hobby_list': ['直男', '开车', '玩']}
v = dic.get('name')
print(v)
输出结果:mrxiong
dic = {'name': 'mrxiong', 'age': 30, 'hobby_list': ['直男', '开车', '玩']}
v = dic.get('nameone')
print(v)
输出结果:None
dic = {'name': 'mrxiong', 'age': 30, 'hobby_list': ['直男', '开车', '玩']}
v = dic.get('nameone','没有此键') #可以设置返回值
print(v)
输出结果:没有此键
6、三个特殊的操作
keys()
dic = {'name': '太白', 'age': 18}
print(dic.keys()) # dict_keys(['name', 'age'])
values()
dic = {'name': '太白', 'age': 18}
print(dic.values()) # dict_values(['太白', 18])
items()
dic = {'name': '太白', 'age': 18}
print(dic.items()) # dict_items([('name', '太白'), ('age', 18)])
练习题:
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k4']='v4'
print(dic)
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic.setdefault('k4', 'v4')
print(dic)
请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k1']='alex'
print(dic)
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic.update(k1='alex')
print(dic)
请在k3对应的值中追加一个元素 44,输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic["k3"].append(44)
print(dic)
请在k3对应的值中把22改为'apple',输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k3'][2] = 'apple'
print(dic)
请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic['k3'].insert(1, 18)
print(dic)
二、字典的嵌套
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
请在k3对应的值中追加一个元素 44,输出修改后的字典
dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
dic["k3"].append(44)
print(dic)
练习:
dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38}],
'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'}
}
1】获取汪峰的名字。
name = dic['name']
print(name) #汪峰
2】获取这个字典:{'name':'国际章','age':38}。
l1 = dic['wife'] # 先获取到这个列表
di = l1[0] # 列表按照索引取值,这个字典是列表的第一个元素,所以通过索引获取到这个字典
print(di)
优化:
l1 = dic['wife'][0]
print(l1) #{'name': '国际章', 'age': 38}
3】获取汪峰妻子的名字。
di = dic['wife'][0] # 这个是上一次题获取的小字典的代码
wife_name= di['name'] # 通过小字典然后再通过键就能获取到对应的值
print(wife_name)
优化:
l3 = dic['wife'][0]['name']
print(l3)
4】获取汪峰的第三个孩子名字。
dic2 = dic['children'] # 先获取这个字典
name = dic2['girl_three'] # 在通过这个字典获取第三个孩子的名字
print(name)
优化:
l2 = dic['children']['girl_three']
print(l2) #顶顶