基础数据类型之字典
字典
1,定义
-
列表可以存储大量的数据类型,但是只能按照顺序存储,数据与数据之间关联性不强。 所以咱们需要引入一种容器型的数据类型,解决上面的问题,这就需要dict字典。 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成。 在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的 可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.
- 字典是无序的,可变的,
- 用于储存数据,储存大量数据,
- 字典要比列表快,可以将数据和数据之间进行关联
- 英文dict 简写 dic,使用大括号{}
- 字典中逗号(,)分隔每一个元素
2,字典的键对值
-
语法:{'key1':1,'key2':2}, 'key':键,1:值
-
字典的’键‘:
-
可哈希的——不可变的数据类型(int, str, tuple, bool),避免哈希冲突,使用了开放寻址法 不可哈希 的——可变的数据类型( list, dict, set) 要求唯一 : ——如果有重复的,后边的值将前边的值覆盖
-
-
字典的值:
-
可以任意
-
字典的方法
1,字典的增
-
如果dict 中没有出现这个key,就会将key-value组合添加到这个字典中
-
没有就添加,有就改键的值
-
dic = {} dic['david'] = 1992 print(dic) result {'david':1992}
-
如果dict中没有出现过这个key-value,可通过setdefault设置默认值
-
使用setdefault这个方法,里边放的这个内容是我们字典的键,添加到字典的值就是一个none
-
当setdefault中第一个参数存在这个字典中就不进行添加
-
dic= {} a = dic.setdefault('科比') print(a) print(dic) result None {'科比': None}
2,字典的删
-
dic.pop()
-
通过字典的键进行删除键对值
-
删除有返回值,返回的是被删除的值,没有键
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} s = dic.pop('詹姆士') print(s) print(dic) result 23 {'科比': 24, '艾弗森': 3, '韦德': 3, '麦迪': 1}
-
dic.popitem()
-
随机删除
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} s=dic.popitem() print(s) print(dic) result ('麦迪', 1) {'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3}
-
clear():清空
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic.clear() print(dic) result {}
-
-
del
-
del dic['key']:通过字典的键删除键对值
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} del dic['詹姆士'] print(dic) result {'科比': 24, '艾弗森': 3, '韦德': 3, '麦迪': 1}
-
删除字典
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} del dic print(dic) result 报错NameError: name 'dic' is not defined
-
3,字典的改
-
键在字典中存在的时候就是修改键对应的值
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic['詹姆士'] = 8 print(dic) result {'科比': 24, '詹姆士': 8, '艾弗森': 3, '韦德': 3, '麦迪': 1}
-
-
字典中没有键对值的时候就是添加,添加到字典的末尾
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic['乔丹'] = 23 print(dic) result {'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3, '麦迪': 1, '乔丹': 23}
-
-
update(dic)
-
update括号中的字典级别高于update前面的字典
-
当update中的字典没有dic中的键对值,就添加到dic中,
-
dic.updaate(dic1) 程序从左向右运行,即字典dic1添加到字典dic的末尾,且print(dic)。
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic1={'乔丹':23} dic.update(dic1) print(dic) result {'科比': 24, '詹姆士': 23, '艾弗森': 3, '韦德': 3, '麦迪': 1, '乔丹': 23}
-
4,字典的查
-
for循环
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} for i in dic: print(i) #循环获取都是字典中每个键值对应的键 result 科比 詹姆士 艾弗森 韦德 麦迪
-
-
dic[key]:通过键来查,结果是键的值;如果键不在字典中,就会报错
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic1 = dic['科比'] print(dic1) result 24
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic1 = dic['乔丹'] print(dic1) result 报错:KeyError: '乔丹'
-
-
dic.get(key):通过键来查看,结果是键的值
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic1 = dic.get('艾弗森') print(dic1) result 3
-
当字典中没有这个键,显示None
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic1 = dic.get('乔丹') print(dic1) result None
-
dic.get.(key,"内容"):我们可以在get查找的时候自己定义返回的结果
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} dic1 = dic.get('艾弗森',"忠艾一生") print(dic1) 3
-
-
dic.setdefault(key),查询,none,则添加,有则可修改,可不添加
其他操作
-
获取所有的键(keys)
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} for i in dic.keys(): print(i) result 科比 詹姆士 艾弗森 韦德 麦迪
-
key_list = dic.keys()
-
-
获取所有的值
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} for i in dic.values(): print(i) result 24 23 3 3 1
-
values_list = dic.values()
-
-
获取所有的键对值
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} for k,v in dic.items(): print(k,v) result 科比 24 詹姆士 23 艾弗森 3 韦德 3 麦迪 1
-
keys_values_list = dic.items()
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} for i in dic.items(): #items获取的键对值是元祖 print(i) result ('科比', 24) ('詹姆士', 23) ('艾弗森', 3) ('韦德', 3) ('麦迪', 1)
-
-
高仿列表
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} for i in dic: print(i,dic.get(i)) result 科比 24 詹姆士 23 艾弗森 3 韦德 3 麦迪 1
-
dic= {'科比':24,'詹姆士':23,'艾弗森':3,'韦德':3,'麦迪':1} print(dic.keys()) result dict_keys(['科比', '詹姆士', '艾弗森', '韦德', '麦迪'])#高仿列表
-
解构
-
a,b = 1,2 print(a,b) 结果: 1 2 a,b = ('你好','世界') print(a,b) 结果: 你好 世界 a,b = {'汪峰':'北京北京','王菲':'天后'} print(a,b) 结果: 汪峰 王菲
字典的嵌套
-
dic = { 'name':'汪峰', 'age':48, 'wife':[{'name':'国际章','age':38}], 'children':['第一个熊孩子','第二个熊孩子'] } 获取汪峰的妻子名字 d1 = dic['wife'][0]['name'] print(d1) 获取汪峰的孩子们 d2 = dic['children'] print(d2) 获取汪峰的第一个孩子 d3 = dic['children'][0] print(d3)
布尔值
- True :非零整数
- False:零
- None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
- 其余均为真
希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华