day5__(字典、增删改查、字典的嵌套)

一、字典

列表缺点: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)   #顶顶
posted @ 2020-06-18 14:12  MrXiong  阅读(51)  评论(0编辑  收藏