字典介绍
一,列表的缺点
当我们储存的数据要动态添加,删除的时候,我们一般使用列表,但是列表有的时候会遇到一些麻烦。
# 定义一个列表保存,姓名、性别、职业
nameList = ['xiaoZhang', '男', '木匠'];
# 当修改职业的时候,需要记忆元素的下标
nameList[2] = '铁匠'
# 如果列表的顺序发生了变化,添加年龄
nameList = ['xiaoWang', 18, '男', '铁匠']
# 此时就需要记忆新的下标,才能完成名字的修改
nameList[3] = 'xiaoxiaoWang'
而字典就能正好完美的解决这个缺点
二,字典的基本使用
字典的格式为 {键1:值1,键2:值2,键3:值3,…,键n:值n,}
例如:
info = {'name':'班长', 'id':100, 'sex':'f', 'address':'地球亚洲中国上海'}
info['name'] # 字典使用键来获取对应的值
说明:
- 字典和列表一样,也能够存储多个数据
- 列表中找某个元素时,是根据下标进行的;字典中找某个元素时,是根据’名字’(就是冒号:前面的那个值,例如上面代码中的’name’、‘id’、‘sex’)
- 字典的每个元素由2部分组成,键:值。例如 ‘name’:‘班长’ ,'name’为键,'班长’为值
- 键可以使用数字、布尔值、布尔值、元组等不可变数据类型,但是一般习惯使用字符串
- 每个字典里的key都是唯一的,如果出现了多个key,后面的value会覆盖前一个key对应的value.
在习惯上:
- 列表更适合保存多个商品、多个姓名、多个时间,这样的相似数据;
- 字典更适合保存一个商品的不同信息、一个人的不同信息,这样的不同数据。
# {}
# 元素是键值对 key:value 键、值之间 用:
#键值对之间 用,隔开
#键 必须是不可变类型
#值 可以是任意类型 字符串、数值、列表、元组\集合\布尔等
shiyang = {
'username':'shiyang',
'height':'181cm',
'sex':'male',
'age':18,
(1,2):'666',# 不会报错键最好有意义
# [1,2,3]:999 键不能是可变类型
4:69, # 不会报错键最好有意义
# 'sex':'female', #key不能重复 不会报错但是后边的会覆盖前面的 开发过程中不要重复
}
print(shiyang)
三,字典的增删改查
1,查,查看元素
shiyang = {
'username':'shiyang',
'height':'181cm',
'sex':'male',
'age':18
}
# print(shiyang['username']) #shiyang
# print(shiyang['beauty']) #如果查找的键不存在 一定会报错
# print(shiyang.get('username')) #shiyang
# print(shiyang.get('beauty')) #None如果查找的键不存在 不报错 返回None
# print(shiyang.get('username','height')) #查找多个key 不报错 返回第一个
# print(shiyang.get('beauty'))
# print(shiyang.get('beauty','fanbingbing')) #fanbingbing beauty不存在 设置了一个值
# #原本返回None 我们自己让他返回 fanbingbing
# print(shiyang.get('username','minrui')) #shiyang 本身username 存在 所以返回的 原来的值
# # 不返回自己设置的值
test = 'username'
print(shiyang[test]) #shiyang
# print(shiyang['test']) #报错
除了使用可以寻找数据之外还可以使用get来获取想要的数据
info = {'name':'班长','age':18}
print(info['age']) # 获取年龄
# print(info['sex']) # 获取不存在的key,会发生异常
print(info.get('sex')) # 获取不存在的key,获取到空的内容,不会出现异常
print(info.get('sex', '男')) # 获取不存在的key, 可以提供一个默认值。
重要的事情说三遍!!!
注意,获取默认值并不会修改字典的内容。
注意,获取默认值并不会修改字典的内容。
注意,获取默认值并不会修改字典的内容。
2,改,修改元素
字典不像元组,字典的每一个元素中的数据都是可以进行修改的只要通过key值找到了,都可以进行修改
info = {'name':'班长', 'id':100}
print('修改之前的字典为 %s:' % info)
info['id'] = 200 # 为已存在的键赋值就是修改
print('修改之后的字典为 %s:' % info)
输出之后的结果为
修改之前的字典为 {'name': '班长', 'id': 100}
修改之后的字典为 {'name': '班长', 'id': 200}
3,增,增加元素
如果在使用 变量名[‘键’] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素
info = {'name':'班长'}
print('添加之前的字典为:%s' % info)
info['id'] = 100 # 为不存在的键赋值就是添加元素
print('添加之后的字典为:%s' % info)
输出后的结果为
添加之前的字典为:{'name': '班长'}
添加之后的字典为:{'name': '班长', 'id': 100}
4、删,删除元素
对字典进行删除操作,有一下几种:
- del
- clear()
demo:del删除指定的元素
info = {'name':'班长', 'id':100}
print('删除前,%s' % info)
del info['name'] # del 可以通过键删除字典里的指定元素
print('删除后,%s' % info)
Copy
结果
删除前,{'name': '班长', 'id': 100}
删除后,{'id': 100}
Copy
del删除整个字典
info = {'name':'monitor', 'id':100}
print('删除前,%s'%info)
del info # del 也可以直接删除变量
print('删除后,%s'%info)
Copy
结果
删除前,{'name': 'monitor', 'id': 100}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'info' is not defined
Copy
clear清空整个字典
info = {'name':'monitor', 'id':100}
print('清空前,%s'%info)
info.clear()
print('清空后,%s'%info)
Copy
结果
清空前,{'name': 'monitor', 'id': 100}
清空后,{}
shiyang = {
'username':'shiyang',
'height':'181cm',
'sex':'male',
'age':18
}
# # shiyang['username'] = 'yangyang' #跟列表差不多 列表[]里边是下标值 字典是键的值
# shiyang['jiguan'] = '黄冈' # jiguan这个key 不存在 那么会加到字典的结尾
# print(shiyang) #{'username': 'shiyang', 'height': '181cm', 'sex': 'male', 'age': 18, 'jiguan': '黄冈'}
# pop
# test = shiyang.pop('age')
# print(test) #返回 age 这个键对应的值
# print(shiyang) #'age':18 这个键值对就被删除了
# res = shiyang.popitem() #返回的是 字典最有一个键值对组成的 元组
# print(res) #('age', 18)
# print(shiyang)
# del shiyang['age'] #删除 键 age对应的键值对
# print(shiyang)
# shiyang.clear() #清空字典
# print(shiyang)
# test = 'age'
# del shiyang[test]
# print(shiyang)
四,遍历字典
shiyang = {
'username':'shiyang',
'height':'181cm',
'sex':'male',
'age':18
}
#第一种方式
# for x in shiyang:
# print(x,':',shiyang[x]) #获取的每个键
#第二种方式 获取所有的key 然后遍历key 根据key获取指定的value
# print(shiyang.keys()) #返回字典所有的key dict_keys(['username', 'height', 'sex', 'age'])
# for x in shiyang.keys():
# print(x, ':', shiyang[x])
#第三种方式 获取所有的value值 但是不能拿到 key
# print(shiyang.values()) #dict_values(['shiyang', '181cm', 'male', 18]) 列表
#
# for x in shiyang.values():
# print(x)
#第四种方式 既有键 又有值
print(shiyang.items())#dict_items([('username', 'shiyang'), ('height', '181cm'), ('sex', 'male'), ('age', 18)])
#列表 元素是 元组
# for x in shiyang.items():
# print(x[0],"=",x[1])
for key,value in shiyang.items():
print(key,'=',value)