字典概念及实现
字典是python内置的一种数据结构,与列表一样是一个可变序列
以键值对的方式存储数据,无序
在字典中,根据键来寻找值
创建字典时,字典用{}表示,其中键值对之间用 , 隔开,键与值用:连接
test={'name':'张三','age':10}
也可以使用内置函数dict()函数:
test=dict(name='张三',age=10)
获取字典元素
通过键来获取值
有两种方法,一是直接使用[],二是使用get()
test=dict(name='张三',age=10)
print(test['name'])
print(test.get('name'))
#get()方法设置默认值,使得查询的值不存在时返回默认值
#返回99
print(test.get('color',99))
这两种方法的区别是当想查询的值不存在时,[]方法返回ValueError错误,而get()方法返回None,并且可以通过设置默认值来规定这种情况下应该返回什么
对字典的常用操作
对键的判断
可以直接使用in来判断
test=dict(name='张三',age=10)
#输出True
print('name' in test)
#输出False
print('name' not in test)
删除
使用del()
也可以使用clear()清空字典
test=dict(name='张三',age=10)
#删除name='张三'
del(test['name'])
#输出{'age': 10}
print(test)
#清空字典,输出{}
test.clear()
print(test)
增加
可以直接通过在字典中给一个新的键赋值来增加一个新的键值对
test=dict(name='张三',age=10)
#增加color='red'
test['color']='red'
#输出{'name': '张三', 'age': 10, 'color': 'red'}
print(test)
修改
通过直接将键对应的值修改来修改
test=dict(name='张三',age=10)
#修改age为20
#输出{'name': '张三', 'age': 20}
test['age']=20
print(test)
获取字典视图
keys()
keys()函数用于获取字典中所有的键,返回的是dict_keys类型,可以将其转换为列表
test=dict(name='张三',age=10)
#输出dict_keys(['name', 'age']) <class 'dict_keys'>
print(test.keys(),type(test.keys()))
#将结果转换为列表
#得到['name', 'age']
lis=list(test.keys())
print(lis)
values()
values()函数用于获取字典中所有的值,返回的是dict_values类型,可以将其转换为列表
test=dict(name='张三',age=10)
#输出dict_values(['张三', 10]) <class 'dict_values'>
print(test.values(),type(test.values()))
#将结果转换为列表
#得到['张三', 10]
lis=list(test.values())
print(lis)
items()
items()函数用于获取字典中所有的键值对,返回的是dict_items类型,可以将其转换为列表,列表是由元组组成的。
test=dict(name='张三',age=10)
#输出dict_items([('name', '张三'), ('age', 10)]) <class 'dict_items'>
print(test.items(),type(test.items()))
#将结果转换为列表
#得到[('name', '张三'), ('age', 10)]
lis=list(test.items())
print(lis)
遍历字典元素
可以使用for-in结构
test=dict(name='张三',age=10)
#以下的循环都可以遍历字典,输出键值对
for key,value in test.items():
print(key,value)
for key in test:
print(key,test[key])
字典特点
字典中的元素都是键值对,其中键不能重复,值可以重复,并且元素是无序的
字典中的key必须是不可变对象,比如说不能用列表来当做键
字典可以根据需要动态伸缩
字典会浪费比较大的内存,是一种使用空间换时间的操作
字典生成式
生成字典的公式
内置函数zip():该函数用于将可迭代对象作为参数,将对象中对应的元素打包,形成元组
#使用zip()进行打包,再转换为列表
#得到[('name', 'lili'), ('age', 10)]
lis=list(zip(keys,values))
print(lis)
字典生成式的格式:{表示字典键的表达式:表示字典值的表达式 for 自定义表示键的变量,自定义表示值的变量 in zip(可迭代对象,可迭代对象)}
#得到{'name': 'lili', 'age': 10}
print({key:value for key,value in zip(keys,values)})