字典理解
- 字典又称dictionary,简称dict----官方称为Mapping type
- 字典是一种数据结构,又称为映射,字典的作用和列表类似,都是用来存储对象的容器。
- 与列表的区别:列表存储数据性能很好,但是查询数据性能很差
- 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以快速查找到指定的元素,字典的查询效率很高
- 字典都是以键值对进行存储,个人理解python中的字典,非常类似于java中的枚举
字典创建
- 字典创建语法
语法
使用{}创建字典
d={key:value,key:value,key:value}
d={'name':'张三','age':18}
print(d)
print(d['name'])
{‘name’: ‘张三’, ‘age’: 18}
[Finished in 0.3s]
- 字典的值可以是任意对象,但是字典的key只能是不可变对象,且同一个字典内字典的key是不能重复的
字典的键可以为:int,str,bool,tuple
- 获取字典中的值
d={'name':'张三','age':18}
print(d)
print(d['name'])
{‘name’: ‘张三’, ‘age’: 18}
张三
[Finished in 0.2s]
- 如果使用了字典中不存在的键,会报keyError
实战中应用字典
字典的创建
- 使用dict()函数来创建字典
- 这种方式创建的字典key都是字符串
d=dict(name='张三',age=13,sex='男')
print(d)
{‘name’: ‘张三’, ‘age’: 13, ‘sex’: ‘男’}
[Finished in 0.2s]
- 可以将一个包含双值子序列的序列转换为字典
- 为什么是双值子序列?双值:值是序列里面只有两个值,因为key:value,一个为key,一个为value
- 如果序列中的元素也是序列,我们就称这个元素为子序列
双值子序列:例子
[(1,2),(2,3)]
d=dict([(1,2),(2,3)])
print(d)
{1: 2, 2: 3}
[Finished in 0.3s]
字典常用函数
- len()用于获取字典的键值对个数
- in 和 not in 检查字典中是否包含指定的键,not in 检查字典中是否不包含指定的键
- 获取字典中的值
- 这种方式取值,如果不存在这个key会报KeyError的异常错误
dict[key]
- 还可以通过get(key,default)函数来获取值,好处就是当key不存在,不会报KeyError,会报None,其中如果default参数可选,如果找不到key,会返回default
d=dict([(1,2),(2,3)])
print(d.get(2,4))
字典修改
- 修改字典
- 如果修改的key不存在,就相当于增加一个新的key,存在即覆盖,不存在就添加
dict[key]=修改的值
- 还可以使用setdefault(key,default):如果key存在于字典中,则返回key的值,不会对字典做任何操作,否则添加这个key,并设置value
- update([other]):将其他字典中的key-value添加到当前字典中,如果存在相同的key,则,值会被后者替换
d={1:2,2:3}
c={3:4,2:5}
d.update(c)
print(d)
{1: 2, 2: 5, 3: 4}
[Finished in 0.3s]
字典删除与清空
- 删除字典元素
- 可以使用del来删除字典中的key-value
语法:
del dict[key]
d={1:2,2:3}
del d[1]
print(d)
{2: 3}
[Finished in 0.2s]
- 使用popitem()进行随机删除,但是总是删除最后一个
使用popitem()删除后,返回被删除的key-value,但是返回的是一个元祖,第一个是key,第二个是value,如果使用popitem()删除一个空字典也会报错
d={1:2,2:3}
d.popitem()
- 使用pop(key,default),根据key来进行删除
- 被删除的value会被返回
- 如果删除不存在的key会抛出异常,如果指定了默认值,在删除不存在的key时不会报错,而是返回默认值
d={1:2,2:3}
print(d.pop(1,'这是默认值'))
- 使用clear()用来清空字典
字典copy
- 使用copy()对字典进行浅复制
浅复制:这里指的是复制的深度只有一层,或两层,不会全部完全的复制,比如在字典中,使用copy()复制字典,意味着创建一个新的对象,地址是不同的。但是如果字典里面套字典,通过测试会发现,内层的字典并不是独立的,而与原值具有相同的地址空间,如下面的例子,复制后虽然是不同对象,但是赋值猪八戒后,两个对象的值都变了,说明是浅复制
d={'a':'b','b':{'name':'孙悟空','age':14},'c':'c'}
d2=d.copy()
print(d,id(d))
print(d2,id(d2))
d2['b']['name']='猪八戒'
print(d,id(d))
print(d2,id(d2))
{‘a’: ‘b’, ‘b’: {‘name’: ‘孙悟空’, ‘age’: 14}, ‘c’: ‘c’} 2312860404992
{‘a’: ‘b’, ‘b’: {‘name’: ‘孙悟空’, ‘age’: 14}, ‘c’: ‘c’} 2312860405056
{‘a’: ‘b’, ‘b’: {‘name’: ‘猪八戒’, ‘age’: 14}, ‘c’: ‘c’} 2312860404992
{‘a’: ‘b’, ‘b’: {‘name’: ‘猪八戒’, ‘age’: 14}, ‘c’: ‘c’} 2312860405056
[Finished in 0.2s]
字典遍历
- keys()方法返回字典的所有key,该方法会返回一个序列,序列中返回字典的所有key,可以通过遍历key返回字典中的值
d={'a':'1','b':'2','c':'3'}
for k in d.keys():
print(k,d[k])
- values():该方法会返回一个序列,序列中保存有字典的值:缺点是只能看到value
for v in d.values():
print(v)
- items():该方法会返回字典中所有的项,它会返回一个序列,序列包含双值子序列,双值分别是key和value。返回的是元祖
d={'a':'1','b':'2','c':'3'}
print(d.items())
for k,v in d.items():
print(k,'=',v)
dict_items([(‘a’, ‘1’), (‘b’, ‘2’), (‘c’, ‘3’)])
a = 1
b = 2
c = 3
[Finished in 0.1s]