在Python中,字典与列表类似,也是可变序列,不过与列表不同的是,它是无序的可变序列,保存的内容是以“键-值对”的形式存放的。类似于我们的新华字典,将拼音和汉字关联起来,通过音节可以快速找到目标汉字。这里,音节相当于键,目标汉字相当于值。键是唯一的,而值可以有多个。
字典的特征
- 通过键来读取值
- 字典是任意对象的无序集合。字典是无序的,保存在字典中的项没有特定的顺序,这样可以提高查询效率。
- 字典是可变的,并且可以任意嵌套。字典可以在远处增长或者缩短,并且支持任意深度的嵌套,它的值可以是列表或者其它字典。
- 字典的键必须唯一。不允许同一个键出现两次,如果出现两次,则后面的那个值会被记住。
- 字典中的键必须不可变。键可以是数字、字符串、元组。
字典的相关操作
字典的创建
1. 通过映射函数创建字典
语法:dictionary = dict(zip(list1,list2))
释义:
- dictionary:字典名称
- zip()函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。如果想获取元组,可以将zip对象使用tuple()函数转换为元组;如果想获取列表,则可以使用list()函数将其转换为列表。
- list1:一个列表,用于指定要生成字典的键。
- list2:一个列表,用于指定要生产字典的值。
注意:如果list1和list2的长度不一致,则与最短的列表长度相同。
代码实例:
#通过映射函数创建字典
name = ['小红','小青','小明'] #作为键的列表
hobby = ['唱歌','跳舞','书法'] #作为值的列表
dictionary = dict(zip(name,hobby)) #转换为字典
print(dictionary)
运行结果如下:
==================== RESTART: E:\python_work\python_demo.py ====================
{'小红': '唱歌', '小青': '跳舞', '小明': '书法'}
>>>
2. 通过给定的关键字参数创建字典
语法格式:
dictionary = dict(key1=value1, key2=value2, key3=value3),....,key n = value n)
参数释义:
dictionary:字典名称
key1、key2...keyn:参数名,必须唯一。该参数名会转换为字典的键
value1、value2....valuen:参数值,可以是任何数据类型,可以重复。该参数值会转换为字典的值。
代码实例:
#通过给定的关键字参数创建字典
dictionary = dict(小红='爱唱歌',小青='爱跳舞',小明='爱书法')
print(dictionary)
代码运行结果如下:
==================== RESTART: E:\python_work\python_demo.py ====================
{'小红': '爱唱歌', '小青': '爱跳舞', '小明': '爱书法'}
>>>
3.创建一个值为空的字典
语法格式:dictionary = dict.fromkeys(list1),其中list1表示字典的键列表
代码实例:
#创建一个值为空的字典
name_list = ['小红','小青','小明']
dictionary = dict.fromkeys(name_list)
print(dictionary)
代码运行结果如下:
==================== RESTART: E:\python_work\python_demo.py ====================
{'小红': None, '小青': None, '小明': None}
>>>
4.通过已经存在的元组和列表创建字典
代码实例:
#通过已经存在的元组和列表创建字典
name_tuple = ('小红','小青','小明') #作为键的元组
hobby = ['唱歌','跳舞','书法'] #作为值的列表
dict1 = {name_tuple:hobby}
print(dict1)
代码运行结果如下:
==================== RESTART: E:\python_work\python_demo.py ====================
{('小红', '小青', '小明'): ['唱歌', '跳舞', '书法']}
>>>
注意,上述创建方式,键不能为“列表”,否则程序会出错,看下面:
#列表不能作为键来创建字典,否则程序报错
name_tuple = ['小红','小青','小明'] #作为键的元组
hobby = ['唱歌','跳舞','书法'] #作为值的列表
dict1 = {name_tuple:hobby}
print(dict1)
运行结果如下,程序会报错:
==================== RESTART: E:\python_work\python_demo.py ====================
Traceback (most recent call last):
File "E:\python_work\python_demo.py", line 366, in <module>
dict1 = {name_tuple:hobby}
TypeError: unhashable type: 'list'
>>>
访问字典
直接上实例代码,不明白的亲们一定要亲手敲一遍啊,不能手懒哦:
#通过映射函数创建字典
name = ['小红','小青','小明'] #作为键的列表
hobby = ['唱歌','跳舞','书法'] #作为值的列表
dictionary = dict(zip(name,hobby)) #转换为字典
print(dictionary)
print('==========接下来访问字典===指定的键存在=====')
print('小红的爱好是:',dictionary['小红'])
print('小青的爱好是:',dictionary['小青'])
print('小明的爱好是:',dictionary.get('小明'))#通过get也可以获取键对应的值
print('小黄的爱好是:',dictionary.get('小黄'))#如果键不存在,则返回默认值None
print('小张的爱好是:',dictionary.get('小张','指定的键不存在'))#程序优化:如果键不存在,则输出'指定的键不存在'
print('==========接下来访问字典===指定的键不存在==抛异常处理===')
print('小白的爱好是:',dictionary['小白'] if '小白' in dictionary else '要查找的键不存在')
print('==========接下来访问字典===指定的键不存在==程序中断运行===')
print('小白的爱好是:',dictionary['小白'])
print('程序执行完毕')
*************************************************
*******************运行结果如下*******************
*************************************************
==================== RESTART: E:\python_work\python_demo.py ====================
{'小红': '唱歌', '小青': '跳舞', '小明': '书法'}
==========接下来访问字典===指定的键存在=====
小红的爱好是: 唱歌
小青的爱好是: 跳舞
小明的爱好是: 书法
小黄的爱好是: None
小张的爱好是: 指定的键不存在
==========接下来访问字典===指定的键不存在==抛异常处理===
小白的爱好是: 要查找的键不存在
==========接下来访问字典===指定的键不存在==程序中断运行===
Traceback (most recent call last):
File "E:\python_work\python_demo.py", line 387, in <module>
print('小白的爱好是:',dictionary['小白'])
KeyError: '小白'
>>>
遍历字典
使用字典的items()方法可以获取字典的“键-值对列表”。
语法:dictionary.items()
代码实例:
#遍历字典
name = ['小红','小青','小明'] #作为键的列表
hobby = ['唱歌','跳舞','书法'] #作为值的列表
dictionary = dict(zip(name,hobby)) #转换为字典
print('=====这些同学的爱好分别是=====')
for item in dictionary.items():
print(item)
print('====明确输出key-value值===')
for key,value in dictionary.items():
print(key,'的爱好是:',value)
代码执行结果:
==================== RESTART: E:\python_work\python_demo.py ====================
=====这些同学的爱好分别是=====
('小红', '唱歌')
('小青', '跳舞')
('小明', '书法')
====明确输出key-value值===
小红 的爱好是: 唱歌
小青 的爱好是: 跳舞
小明 的爱好是: 书法
>>>
添加、修改、删除字典元素
添加字典元素:通过已有的字典名称dictionary[不重复的键] = '值' 即可
修改字典元素:通过已有的字典名称dictionary[重复的键] = '值' 即可
删除字典元素:通过del dictionary[字典中存在的键] 即可,但需要保证这个“键”必须存在,否则报错
代码实例如下:
#添加、修改、删除字典元素
name = ['小红','小青','小明'] #作为键的列表
hobby = ['唱歌','跳舞','书法'] #作为值的列表
dictionary = dict(zip(name,hobby)) #转换为字典
print('原来的字典:',dictionary)
dictionary['小白'] = '写代码' #添加字典元素
print('字典中加入了小白:',dictionary)
dictionary['小红'] = '学习' #修改字典元素
print('小红的爱好由唱歌变为学习了:',dictionary)
代码运行结果:
=========================== RESTART: E:\python_work\python_demo.py ===========================
原来的字典: {'小红': '唱歌', '小青': '跳舞', '小明': '书法'}
字典中加入了小白: {'小红': '唱歌', '小青': '跳舞', '小明': '书法', '小白': '写代码'}
小红的爱好由唱歌变为学习了: {'小红': '学习', '小青': '跳舞', '小明': '书法', '小白': '写代码'}
>>>
字典推导式
使用字典推导式可以快速生成一个字典,这和列表推导式差不多。
举个例子,生成一个包含4个随机数的字典,字典的键用数字来表示。
#使用字典推导式生成一个包含4个随机数的字典
import random
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print('生成的字典为:',randomdict)
程序运行结果为:
=========================== RESTART: E:\python_work\python_demo.py ===========================
生成的字典为: {1: 74, 2: 65, 3: 42, 4: 46}
>>>
本小节到此结束啦^_^