字典
一、字典
(1)字典在其他语言中叫键值对数据,在python中叫字典。一个字典包括2部分,键和值,字典在表示的时候dic = {键:值},表示时,对值没有要求,对键有要求,键必须是可哈希对象(不可变数据类型),键和值必须成对出现,哪怕值是()
#####不可哈希的就是可变的数据,不可变的数据能哈希。
可变数据类型:
不可变数据类型:
(2)python3.6以上版本字典默认是有序的,但有人问起来还是要说字典是无序的(为什么说字典是有序的呢?因为python3.6以上版本字典不能合并,简言之,就是不能dic1+dic2,同样,字典也不能使用下标)
print({1:"asd"} + {2:"dass"}) 报错了 TypeError Traceback (most recent call last) <ipython-input-19-8b26544e8c34> in <module> ----> 1 print({1:"asd"} + {2:"dass"}) TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
(3)一个字典不能出现重复的键,如果键重复了,重复的话就会把值覆盖
(4)一个字典是一个存储键值对集合的容器对象,它通过使用关键字实现快速获取、删除和更新值。
(5)相较而言,字典的查找更快一点,因为它是通过某一个关键点查找。
二、字典的操作
(1)增
1.直接赋值
dic[键] = 值,话不多说,直接上代码吧
dic2 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
dic2[11] = "王健林"
print(dic2)
输出结果:
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林'}
2.dic.setdefault(键,值)
dic2 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
dic2[11] = "王健林"
print(dic2)
dic2.setdefault(17,"小凤")
print(dic2)
dic2.setdefault(11,"阿浩")
print(dic2)
输出结果:
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林'}
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林', 17: '小凤'}
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林', 17: '小凤'}
这个结果就能看到setdefault很有意思了,它有一个执行过程:
1.先去字典通过11这个键查找有没有值
2.如果有值,就不添加
3.如果没有值,就添加
再举个例子
dic2 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
dic2[11] = "王健林"
print(dic2)
dic2.setdefault(17,"小凤")
print(dic2)
dic2.setdefault(11,"阿浩")
print(dic2)
print(dic2.setdefault(18))
print(dic2)
dic2.setdefault(19,'acm')
print(dic2)
输出结果:
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林'}
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林', 17: '小凤'}
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林', 17: '小凤'}
None
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林', 17: '小凤', 18: None}
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True, 11: '王健林', 17: '小凤', 18: None, 19: 'acm'}
这个执行过程:
1.先去字典中通过键查找有没有值,没有值,就是None
2.如果有值,就不添加
3.如果是None,就添加,返回的是添加的值
(2)删
1.del dic ####删除整个字典
2.del dic[键] ####通过键删除
3.dic.pop(键) ###pop通过指定键删除,pop也有返回值,返回的是被删除的值,与列表中的pop区分开
dic1 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
print(dic1.pop(False))
print(dic1)
输出结果
1
{'1': 'xas', (1, 2): [1, 2, 3], 4: True}
4.dic.clear() ###清空
dic1 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
dic1.clear()
print(dic1)
输出结果:
{}
需要注意,字典没有remove这个操作
5.dic.popitem() ####3.6版本及以上默认删除最后一个,3.5以下就是随即删除了
dic1 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
dic1.popitem()
print(dic1)
输出结果:
{False: 1, '1': 'xas', (1, 2): [1, 2, 3]}
(3)改
1.dic1.update(dic2) #更新
dic1 = {"33":"dd","44":"jj"}
dic2 = {"55":"kk","66":"aa"}
dic1.update(dic2)
print(dic1)
输出结果:
{'33': 'dd', '44': 'jj', '55': 'kk', '66': 'aa'}
dic1 = {"33":"dd","44":"jj"}
dic2 = {"33":"kk","66":"aa"}
dic1.update(dic2)
print(dic1)
输出结果:
{'33': 'kk', '44': 'jj', '66': 'aa'}
1.dic1为被更新的字典,dic2是更新的内容
2.被更新的内容如果在要更新的内容中就会被覆盖,若不在,就是2个字典的合并
2.改的另一种方法,字典中没有的叫增,如果有的话就叫改(这么说估计也不明白,看代码吧)
dic1 = {"33":"dd","44":"jj"}
dic1["33"] = "kk"
print(dic1)
输出结果:
{'33': 'kk', '44': 'jj'}
(4)查
通过键查找有2种方式
1.通过键查找值
dic1 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
print(dic1)
print(dic1[0])
print(dic1['1'])
输出结果:
{False: 1, '1': 'xas', (1, 2): [1, 2, 3], 4: True}
1
xas
dic1 = {"33":"dd","44":"jj"}
print(dic1[2])
报错
KeyError Traceback (most recent call last)
<ipython-input-6-ad0a7a37f9f5> in <module>
1 dic1 = {"33":"dd","44":"jj"}
2
----> 3 print(dic1[2])
KeyError: 2
如果键不存在就会报错
2.dic.get(键)
dic1 = {"33":"dd","44":"jj"}
print(dic1.get(2))
print(dic1.get("33"))
输出结果:
None
dd
如果键不存在,返回None
3.dic.setdefault(键)
dic1 = {"33":"dd","44":"jj"}
print(dic1.setdefault("33"))
输出结果:
dd
三、字典的嵌套
四、补充
(1)dic.keys(), dic.values(), dic.items()
dic1 = {"33":"dd","44":"jj"}
print(dic1.keys()) ###高仿列表dic1.keys(['33','44']),不能使用下标
print(dic1.values()) ### 高仿列表
for i in dic1.keys():
print(i)
for j in dic1.values():
print(j)
for k in dic1.items():
print(k) ###打印出的是元组
输出结果:
dict_keys(['33', '44'])
dict_values(['dd', 'jj'])
33
44
dd
jj
('33', 'dd')
('44', 'jj')
(2)解构
变量个数和等号右面的个数要相同,字符串,列表,元组,字典都可以解构,数字和布尔值需要用逗号间隔开
在解构时,变量个数要与等号右边字符串的长度,列表,元组,字典中的元素个数相同
a,b,c = 1,2,3 print(a) print(b) print(c) d,e,f = 'asd' print(d) print(e) print(f) g,h,i = [7,8,9] print(g) print(h) print(i) 输出结果: 1 2 3 a s d 7 8 9
再举一个解构的实例
dic2 = {False:1,'1':'xas',(1,2):[1,2,3],4:True}
for i,j in dic2.items():
print(i)
print(j)
输出结果
False
1
1
xas
(1, 2)
[1, 2, 3]
4
True
(3)get,pop别的用法
dic2 = {"33":"gg","44":"kk"}
ret1 = dic2.get("99","你傻呀,没有还要拿")
print(ret1)
ret2 = dic2.pop("99","傻子")
print(ret2)
ret3 = dic2.pop("99")
print(ret3)
结果:
你傻呀,没有还要拿
傻子
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-24-bab661a3efdd> in <module>
4 ret2 = dic2.pop("99","傻子")
5 print(ret2)
----> 6 ret3 = dic2.pop("99")
7 print(ret3)
KeyError: '99'
(4)fromkeys

浙公网安备 33010602011771号