什么是字典
- Python内置的数据结构之一,与列表一样是一个可变序列
- 以键值对的方式存储数据,字典是一个无序的序列
字典的实现原理:
字典的实现原理与查字典类似,查字典是先根据部首或者拼音查找相对应的页码。Python中的字典是根据key查找value
字典的创建
- 方法一:使用花括号
字典名={‘张三’:100,‘李四’:98}
- 方法二:使用内置函数dict()
dict(name=‘jack’,age=20)
例:
zidian={'hello':92,'world':93}
print(zidian)
print(type(zidian))
score=dict(name='jack',age=20)
print(score)#系统会自动将name匹配成键,age匹配成值
结果:
{‘hello’: 92, ‘world’: 93}
<class ‘dict’>
{‘name’: ‘jack’, ‘age’: 20}
字典元素的获取
- 方法一:使用[]
- 方法二:get()函数
例:
zidian={'hello':92,'world':93,'python':50}
print(zidian['hello'])
print(zidian.get('world'))
print(zidian.get('abc'))
print(zidian.get('abc',99))#abc是在查找'abc'不存在时,提供的一个默认值
结果:
92
93
None
99
[]取值与使用get()取值的区别
- []如果字典中不存在指定的key,抛出KeyError异常
get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None,可以通过参数设置默认的value,以便指定的key不存在时返回
字典的key的判断:in或not in
- in:指定的key在字典中存在返回True
- not in 指定的key在字典中不存在返回True
例:
zidian={'hello':92,'world':93,'python':50}
print('hello' in zidian)
结果:
True
字典的增、删、改操作
- 字典元素的删除:del
例:
zidian={'hello':92,'world':93,'python':50}
del zidian['hello']
print(zidian)
print('hello' in zidian)
结果:
{‘world’: 93, ‘python’: 50}
False
- 字典元素的清空:clear()
例:
zidian={'hello':92,'world':93,'python':50}
zidian.clear()#清空字典元素
结果:
{}
- 字典元素的新增和修改:使用中括号
格式:
字典名[‘key’]=值
例:
zidian={'hello':92,'world':93,'python':50}
zidian['hhh']=99#新增元素
print(zidian)
zidian['hhh']=100#修改元素
print(zidian)
结果:
{‘hello’: 92, ‘world’: 93, ‘python’: 50, ‘hhh’: 99}
{‘hello’: 92,‘world’: 93, ‘python’: 50, ‘hhh’: 100}
获取字典视图的三个方法
- keys()→获取字典中所有key
- values()→获取字典中所有value
- items()→获取字典中所有key,value对
例:
zidian={'hello':92,'world':93,'python':50}
print(zidian.keys())
print(type(zidian.keys()))
print(list(zidian.keys()))#将所有的key组成的视图转成列表
print(zidian.values())
print(list(zidian.values()))#将所有的value组成的视图转成列表
print(zidian.items())
print(list(zidian.items()))#将所有的key、value组成的视图转成列表
结果:
dict_keys([‘hello’, ‘world’, ‘python’])
<class ‘dict_keys’>
[‘hello’,‘world’, ‘python’]
dict_values([92, 93, 50])
[92, 93, 50]
dict_items([(‘hello’, 92), (‘world’, 93), (‘python’, 50)])
[(‘hello’,92), (‘world’, 93), (‘python’, 50)]
字典元素的遍历
- 格式一(获取键):
for item in 字典名:
print(item)
- 格式二(获取值):
for item in 字典名:
print(字典名[item])
- 格式三(获取值):
for item in 字典名:
print(字典名.get(item))
例一(输出键):
zidian={'hello':92,'world':93,'python':50}
for item in zidian:
print(item)#会输出字典中所有的键
结果:
hello
world
python
例二(输出值):
zidian={'hello':92,'world':93,'python':50}
for item in zidian:
print(zidian[item])
print(zidian.get(item))
结果:
92
92
93
93
50
50
字典的特点
-
字典中所有元素都是一个key—value对,key不允许重复,value可以重复
-
字典中的元素时无序的
-
字典中的key必须是不可变对象字典也可以根据需要动态地伸缩
-
字典会浪费较大的内存,是一种使用空间换时间的数据结构
例:
a={'name':'张三','name':'李四'}
print(a)#key不允许重复
b={'a':10,'b':10}
print(b)
结果:
{‘name’: ‘李四’}
{‘a’: 10, ‘b’: 10}
字典的生成式
使用内置函数zip()
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,任何返回由这些元组组成的列表
格式:
变量名={item:price for item,price in zip(items,prices)}
例:
c=['hello','world','python']
d=[96,97,98]
a={m:n for m,n in zip(c,d)}
print(a)
a={m.upper():n for m,n in zip(c,d)}#upper()全部大写
print(a)
结果:
{‘hello’: 96, ‘world’: 97, ‘python’: 98}
{‘HELLO’: 96, ‘WORLD’: 97,‘PYTHON’: 98}
注意:当键或者值数量不同时,以数量少的为准
例:
c=['hello','world','python','love']
d=[96,97,98]
a={m:n for m,n in zip(c,d)}
print(a)
结果:
{‘hello’: 96, ‘world’: 97, ‘python’: 98}
#此时love并没有进入元组中