Python基础学习(05)
一、今日内容大纲
- 字典的初识
- 字典的使用
- 字典的嵌套
二、dict 字典
-
字典
列表可以存储大量的数据,但数据之间的关联性不强,且列表的查询速度相对比较慢,字典作为另一种容器型数据类型的存在弥补了这些缺点,用大括号括起来,以键值对形式存储的数据类型。其基本形式如下:
dict = {'Raigor': {'name:':'Raigor','age':18,'gender':male} 'SB': ['马维','jklasdfgh'] }
-
键必须是不可变的数据类型:str、bool、int、tuple;
-
值可以是任意数据类型、对象;
-
字典在3.5及以前是无序的,3.6x会按照初次建立字典的顺序排列,学术上不认为字典是有序的,字典在3.7x以后都是有序的;
-
字典的缺点是以空间换取时间,查询速度非常快。
-
-
数据类型的分类
- 可变(不可hash)的数据类型:list、dict、set
- 不可变(可hash)的数据类型:str、bool、int、tuple
-
字典的创建方式
-
方式一:利用tuple的拆包
dic = dict((('one',1),('two',2),('three',3))) print(dic)
-
方式二:
dic = dict(one = 1, two = 2, three = 3) print(dic)
-
方式三:官方方式
dic = dict({'one': 1, 'two': 2, 'three': 3}) print(dic)
三种方式运行结果都为:
{'one': 1, 'two': 2, 'three': 3}
-
-
验证字典的合法性
dic = {[1,2,3]: 'alex', 1: 666} print(dic) # TypeError: unhashable type: 'list'
三、字典的增删改查
-
增加元素
有下列一组dict:
dic = {'name': 'Raigor', 'age': 18}
-
方法一:直接增加
dic['gender'] = 'male' # 增加了一对键值对 dic['age'] = 28 # 更改了一对键值对 print(dic)
程序运行结果为:
{'name': 'Raigor', 'age': 28, 'gender': 'male'}
-
方法二:setdefault函数
dic.setdefault('hobby','female') # 增加了一堆键值对 dic.setdefault('age',48) # setfault函数不会修改原有的键值对 print(dic)
程序运行结果为:
{'name': 'Raigor', 'age': 18, 'hobby': 'female'}
-
-
删除元素
有下列一组dict:
dic = {'name': 'Raigor', 'age': 18}
-
方法一:pop函数按照键值删除键值对
ret1 = dic.pop('age') print(ret1,dic) # ret2 = dic.pop('hobby') # 无该键会出现报错 ret2 = dic.pop('hobby','No research result.') # 如果pop对象不存在,会返回第二个值并不做改动 print(ret2,dic)
程序运行结果为:
18 {'name': 'Raigor'} No research result. {'name': 'Raigor'}
-
方法二:clear函数清空dict
dic.clear() print(dic)
程序运行结果为:
{}
-
方法三:del函数(不建议使用)
del dic['age'] # del dic['hobby'] # 删除不存在的键值对会出现报错,所以不推荐使用 print(dic)
程序运行结果为:
{'name': 'Raigor'}
-
-
修改元素
略,见增加元素中的索引操作。
-
查找元素
有下列一组dict:
dic = {'name': 'Raigor', 'age': 18}
-
方法一:索引(不建议使用)
print(dic['age']) print(dic['hobby']) # dic['hobby']不存在会出现报错,所以不建议使用
程序运行结果为:
18
-
方法二:get函数
re1 = dic.get('age') re2 = dic.get('hobby','No research result.') # 搜索字典中不存在的键的时候会返回第二个值 print(re1,re2)
程序运行结果为:
18 No research result.
-
四、特殊函数
有下列一组dict数据:
dic = {'name': 'Raigor', 'age': 18}
-
keys关键词函数
print(dic.keys(),type(dic.keys())) # 可以将其转化为列表,也可以循环遍历它 print(list(dic.keys())) # 转化为列表 for key in dic.keys(): # 循环遍历关键字,但这种方式意义不大,因为将dic.keys改为dic也会得出相同的结果 print(key)
程序运行结果为:
dict_keys(['name', 'age']) <class 'dict_keys'> ['name', 'age'] name age
-
values对应值函数
print(dic.values(),type(dic.values())) #同keys函数的基本用法相同 print(list(dic.values())) for value in dic.values(): print(value)
程序运行结果为:
dict_values(['Raigor', 18]) <class 'dict_values'> ['Raigor', 18] Raigor 18
-
items键值对函数
print(dic.items(),type(dic.items())) # 同keys函数的基本用法相同 print(list(dic.items())) for key, value in dic.items(): # 利用元组的拆包可以遍历每个键值对的key和value print(key, value)
程序运行结果为:
dict_items([('name', 'Raigor'), ('age', 18)]) <class 'dict_items'> [('name', 'Raigor'), ('age', 18)] name Raigor age 18
五、字典的嵌套
# 习题一:
dic = {
'name':'汪峰',
'age':48,
'wife':[{'name':'国际章','age':38}],
'children':{'girl_first':'小苹果','girl_second':'小怡','girl_three':'顶顶'}
}
# 1. 获取汪峰的名字。
name = dic.get('name')
print(name)
# 2.获取这个字典:{'name':'国际章','age':38}。
wife = dic.get('wife')
print(wife)
# 3. 获取汪峰妻子的名字。
wife_name = wife[0].get('name')
print(wife_name)
# 4. 获取汪峰的第三个孩子名字。
third_kid = dic.get('children').get('girl_three')
print(third_kid)
# 习题二:
dic1 = {
'name': ['alex', 2, 3, 5],
'job': 'teacher',
'oldboy': {'alex':['python1',"python2",100]}
}
# 1. 将name对应的列表追加一个元素'wusir'
dic1.get('name').append('wusir')
print(dic1.get('name'))
# 2. 将name对应的列表中的alex大写
dic1.get('name')[0] = dic1.get('name')[0].upper()
print(dic1.get('name'))
# 3. oldboy对应的字典加一个键值对'老男孩':'linux'
dic1.get('oldboy').setdefault('老男孩', 'linux')
print(dic1.get('oldboy'))
# 4. 将oldboy对应的字典中的alex对应的列表中的python2删除
dic1.get('oldboy').get('alex').remove('python2')
print(dic1.get('oldboy'))