第九篇 字典类型的内置方法
#dict(字典)
1 用途
- 可以用key描述值,相较于索引取值更直观高效
- 多用于存的值是不同的状态,比如存的值有姓名、年龄、性别等等
2 如何去定义一个字典类型
- 大括号 {} 包裹键值,并用逗号隔开每个键值对,键值对的形式为 key : value
- key必须为不可变数据类型,key一般用字符串类型;value 可以是任意数据类型
dic = {'a':6,'b':3} #等同于 dic = dict({'a':6,'b':3})
print(dic)
'''结果是:
{'a':6,'b':3}
'''
- 也可以用内置函数 dict()
dic = dict(a=6,b=3) '''不能写成dic = dict(6=a,3=b) 会有语法错误“这个关键字不能成为一种表达”'''
print(dic)
'''结果是:
{'a': 6, 'b': 3}
'''
- 不推荐用数字来充当key,虽然数字用作key本身没问题
dic = {1:'jojo',2:'bob',0:'jim'}
print(f'dic[0] = {dic[0]}') '''很容易让人误以为是列表,而且key不再具有描述信息的能力'''
'''结果是:
dic[0] = jim
'''
- 不能用unhashable类型(也即是可变数据类型)充当key
dic = {[0]:'jim','age':5}
'''程序会报错'''
3 常用操作和内置方法
- 按key 存取值
dic = {'name':'king','age':26}
print(dic['name'])
#结果是 king
- 长度len()
dic = {'name':'king','age':26,'gender':'male'}
print(len(dic))
#结果是:3
#数的应该是 key 的个数
- 成员运算 in 和 not in
dic = {'name':'king','age':26,'gender':'male'}
#判断字典中是否有我们给出的成员
print(f'{"king" in dic}')
print(f'{"name" in dic}')
print(f'{"age" in dic}')
print(f'{"king" not in dic}')
print(f'{not "king" in dic}')
#结果是:Flase
# True
# True
# True
# True
- 键 keys()、值 values()、键值对 items()
注意:使用这三种方法时,python2中打印的是列表,python3中打印的是元组
## 我们用python3来演示 ##
# 取键 keys()
dic = {'rank':12,'score':66}
print(dic.keys())
#结果是:dict_keys(['rank', 'score'])
# 取值 values()
dic = {'rank':12,'score':66}
print(dic.values())
#结果是:dict_values([12, 66])
# 取简直对 items()
dic = {'rank':12,'score':66}
print(dic.items())
#结果是:dict_items([('rank', 12), ('score', 66)])
- 用循环和上述的三种方法可以取出想要的值
# dic是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序,并且输出的是元组类型
dic = {'name':'king','age':26,'gender':'male'}
for K,V in dic.items(): #可以把items()换成keys()或values()试试
print(K,V)
#可以打印字典中的每一个元素值
#python3中打印的结果是
'''
name king
age 26
gender male
'''
##python2中打印结果:
'''
('gender', 'male')
('age', 26)
('name', 'king')
'''
- 删除 del
dic = {'name':'king','age':26,'gender':'male'}
del dic['name']
print(dic)
'''输出结果:{'age': 26, 'gender': 'male'}'''
- 删除(可以指定key之后删除元素,返回值是value) pop()
dic = {'name':'king','age':26,'gender':'male'}
print(dic.pop('name'))
print(dic)
'''结果是:
king
{'age': 26, 'gender': 'male'}
'''
- 随机删除一个元素(返回值的类型是元组) popitem()不需要参数
dic = {'name':'king','age':26,'gender':'male'}
print(dic.popitem())
print(dic)
'''结果是:
('gender', 'male')
{'name': 'king', 'age': 26}
'''
- get() 通过key获取value,并返回value,但不对字典做任何操作,当输入的key不在字典中时,返回值是None
dic = {'name':'king','age':26,'gender':'male'}
print(dic.get('name'))
print(dic)
'''结果是:
king
{'name': 'king', 'age': 26, 'gender': 'male'}
'''
- update() 更新字典,参数必须是字典类型
dic = {'name':'king','age':26}
dic.update(dict(a=2))
print(dic)
'''结果是:
{'name': 'king', 'age': 26, 'a': 2}
'''
- fromkeys() 用于创建一个新字典,以列表 key_list 中的元素作为新字典的键,value为新字典所有键对应的初始值
key_list = ['name','age','gender']
dic = dict.fromkeys(key_list,None)
print(dic)
'''结果是:
{'name': None, 'age': None, 'gender': None}
'''
- setdefault() 和get()有点类似,可以通过键key查看value,不同的时,当查看的元素不存在时,它会在字典中将查看的内容设置为新的字典元素,且设置完之后不能再通过同样的方法改变value了。(value值默认是None)
dic = {'name':'king','age':26}
print(dic.setdefault('name'))
print(dic.setdefault('gender'))
print(dic)
print(dic.setdefault('gender','male'))
print(dic)
'''结果是:
king
None
{'name': 'king', 'age': 26, 'gender': None}
None
{'name': 'king', 'age': 26, 'gender': None}
'''
4 存一个值or多个值
- 多个值
5 有序or无序
- 无序
- 字典是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序,可以在python2中通过for循环取值查看
6 可变or不可变
- id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型
- 字典是可变数据类型