python基础
一、字典 dict
1.字典初识
why:
列表的缺点:
1,列表如果存储的数据比较多,那么他的查询速度相对慢。
2,列表存储的数据关联性不强。
what: python基础数据类型之一:字典。
python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以逗号隔开的。
{'name': '太白金星', 'age': 18, 'sex': 'man'}
ps:
数据类型的划分:
容器非容器划分:
容器型数据类型:list,tuple,dict,set。
非容器型数据类型:int str bool
可变与不可变划分:
可变(不可哈希hash)的数据类型:list dict,set
不可变(可哈希hash的)的数据类型: int bool str tuple
对数据本身变化:
i = 100
i = 90
print(i)
字典是以键值对形式存储的,
键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。
值:任意数据类型,对象。
字典可以存储大量的键值对数据,
python3.5包括3.5之前:字典是无序的。
python3.6之后,字典变成有序的。
字典的优点:
1,字典存储大量的关系型数据。
2,字典的查询速度非常快。
缺点: 占用空间比较大
how:
where:
2. 字典的常用操作方法
例: dic = { 'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'}
(1)增
dic = { 'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'} #(1)直接增加,有则替换,无则增加 dic['hight'] = 173 print(dic) dic['age'] = 22 print(dic) #(2)dic.setdefault 有则不变,无则增加 # dic.setdefault('weight') #{'name': 'xiaoxu', 'age': 22, 'hobby': 'sing', 'hight': 173, 'weight': None} dic.setdefault('weight',120) #{'name': 'xiaoxu', 'age': 22, 'hobby': 'sing', 'hight': 173, 'weight': 120} dic.setdefault('name','帅哥')#{'name': 'xiaoxu', 'age': 22, 'hobby': 'sing', 'hight': 173, 'weight': 120} print(dic)
(2) 删
dic = { 'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'} #(1)pop 按照键删除 有返回值 # dic.pop('age') # 按照键删除掉键值对 # print(dic) #{'name': 'xiaoxu', 'hobby': 'sing'} # dic.pop('age1') # print(dic) #没有‘age1’,会报错 # dic.pop('age1',None) # 设置两个参数,第二个参数是提示语 一般设置成None # print(dic) #有返回值,不会报错 #(3)clear 清空 # dic.clear() # print(dic) #{} #(4)popitem (随机删除然后返回)但3.6版本之后就是删除最后一个键值对 # dic.popitem() # print(dic) #{'name': 'xiaoxu', 'age': 23} 删掉了 hobby :sing #(5) del # del dic['name'] # 按照键删除 # print(dic) #{'age': 23, 'hobby': 'sing'} # del dic['name1'] # print(dic) #会报错,所以按照键删除,用 pop。 # del dic #删除字典 # print(dic) #NameError: name 'dic' is not defined
(3)改
dic = { 'name': 'xiaoxu', 'age': 23, 'hobby': 'sing'} #(2)update 添加 # dic.update(car='逍客', money=1300) # print(dic) dic = {"name": "jin", "age": 18, "sex": "man"} dic2 = {"name": "alex", "weight": 75} dic2.update(dic) # 将dic里面的键值对覆盖添加到dic2中 print(dic) # {'name': 'jin', 'age': 18, 'sex': 'man'} print(dic2) # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'man'}
(4)查
# (1)按照键查 print(dic['age']) print(dic['age1']) #没有会报错 # (2)get print(dic.get('age')) print(dic.get('age1')) #没有输出 None print(dic.get('age1', '没有此键')) #可以设置返回值 输出结果 : “没有此键”
(5)
dic.keys() 输出键 #输出结果是 类似于list的容器类类型
dic = { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } dic.keys() ret = dic.keys() print(ret, type(ret)) #dict_keys(['name', 'age', 'hobby']) <class 'dict_keys'> for key in ret: print(key) #结果 :name age hobby print(ret[0]) #报错,key 没有索引 TypeError: 'dict_keys' object does not support indexing。 # 可以转化成list print(list(ret))
dic.values() 输出值
dic = { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } dic.values() print(list(dic.values())) for v in dic.values(): print(v) #可以转换list print(list(dic.values()))
dic.items() 输出键值对
dic = { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } c.items() print(dic.items()) print(list(dic.items())) for i in dic.items(): print(i)
(6)分别赋值
a, b = (1, 2) print(a,b) a, b= (1, 2, 3) # 必须一一对应 print(a,b) # 报错 ValueError: too many values to unpack (expected 2) a, b, c = (1, 2, 3) print(a,b,c) a, b = 100, 1000 a, b = [100, 1000] a, b = {'name':'alex', 'age': 73} print(a,b) #只会输出键 name age
例:面试题
a = 18
b = 32
通过一行代码 将a,b的值互换。
a = 18 b = 32 a, b = b, a print(a,b)
dic = { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } print(dic.items()) for k,v in dic.items(): ''' k,v = ('name', '太白金星') k,v = ('age', 18) k,v = ('hobby', 'wife') ''' print('这是键:', k) print('这是值:', v)
3.列表的嵌套
例 :
dic = {
'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
'barry': {
'name': '太白金星',
'age': 18,
'hobby': 'wife',
}
}
1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。
dic = { 'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } } l1 = dic['name_list'] # print(l1) l1.append('老男孩') print(dic)
dic = { 'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } } dic['name_list'].append('老男孩') print(dic)
2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。
dic = { 'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } } print(dic['name_list'][-1].capitalize()) dic['name_list'][-1] = dic['name_list'][-1].capitalize() print(dic)
3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。
dic = { 'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } } print(dic['barry']) dic['barry']['name'] = '男神' print(dic)
4,给barry对应的小字典增加一个键值对: weight: 160
dic = { 'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': { 'name': '太白金星', 'age': 18, 'hobby': 'wife', } } dic['barry']['weight'] = 150 print(dic)