五、字典
字典的初识
-
why
- 列表可以存储大量的数据,数据之间的关联性不强
- ['太白',18,'男','大壮',3,‘男’]
- 列表的查询数据比较慢
- 列表可以存储大量的数据,数据之间的关联性不强
-
what:容器型数据类型 dict
-
how:
- 数据类型的分类(可变与不可变)
- 可变(不可哈希)的数据类型:list dict set
- 不可变(可哈希)的数据类型:str bool int tuple
- 字典:{}括起来,以键值对形式存储的容器型数据类型
-
dic = {'太白': {'name': '太白金星','age': 18, 'sex': '男'}, 'python22期': ['朱光亚', '大壮', '雪飞', '岑哥'], }
-
- 数据类型的分类(可变与不可变)
-
键必须是不可变的数据类型 int,str ( bool tuple 几乎不用) 唯一的
-
值可以是任意数据类型 对象
-
字典 3.5x 版本之前(包括3.5)是无序的
-
3.6x 会按照初次建立字典的顺序排列,学术上不认为是有序的
-
3.7x 以后都是有序的
-
字典的优点: 查询速度非常快 存储关联性的数据
-
缺点 : 以空间换时间
-
字典的创建方式
面试会考
方式一
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)方式三
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic) -
验证字典的合法性
dic = {[1,2,3]:'alex',1:666} # 键要不可变的数据类型
print(dic)
dic = {1:'alex',1:'太白',2:'wusir'} # 键要唯一
print(dic) -
字典的增删改查
dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
增
直接增加 有则改之,无则增加
dic['sex'] = '男'
dic['age'] = 23 # 改
print(dic)
setdefault 有则不变,无则增加
dic.setdefault('hobby')
dic.setdefault('hobby','球类运动')
dic.setdefault('age',45)
print(dic)删
pop 按照键删除键值对,又返回值 ***
设置第二个参数则无论字典中有无此键都不会报错
dic.pop('age')
ret = dic.pop('age')
ret = dic.pop('hobby','没有此键')
print(ret)
print(dic)
clear 清空 **
dic.clear()
print(dic)del **
del dic['age']
del dic['age1']
print(dic)
改
dic['name'] = 'alex'
查
print(dic['hobby_list'])
print(dic['hobby_list1'])
get ***
l1 = dic.get('hobby_list')
l1 = dic.get('hobbt_list1','没有此键') # 可以设置返回值
print(l1)三个特殊的
keys() values() items()
print(dic.keys(),type(dic.keys()))
可以转化成列表
print(list(dic.keys()))
for key in dic.keys():
print(key)for key in dec:
print(key)values()
print(dic.values())
for value in dic.values():
print(value)items()
for key,value in dic.items():
print(key,value)a,b = ('name','太白')
print(a,b)面试题
a = 18
b = 12
a,b = b,a
# a,b = 12,18
print(a,b)
-
相关练习题
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic["k4"] = "v4"
print(dic)请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic['k1'] = 'alex'
请在k3对应的值中追加一个元素 44,输出修改后的字典
dic["k3"].append(44)
print(dic)print(dic['k3'])
l1 = dic.get('k3')
print(l1)
dic.get('k3').append(44)
print(dic)
请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic["k3"].insert(1,18)
print(dic) -
字典的嵌套
dic = {
'name': '汪峰',
'age': 48,
'wife': [{'name': '国际章', 'age': 38},],
'children': {'girl_first': '小苹果','girl_second': '小怡','girl_three': '顶顶'}
}1. 获取汪峰的名字。
print(dic['name'])
2.获取这个字典:{'name':'国际章','age':38}。
print(dic['wife'][0])
3. 获取汪峰妻子的名字。
print(dic['wife'][0]['name'])
4. 获取汪峰的第三个孩子名字。
print(dic['children']['girl_three'])