六章、字典
Special cases aren't special enough to break the rules.——The Zen of Python
字典和列表类似,也是可变序列,不过与列表不同的是,它是无序的可变列表,宝尊的内容是以“键值对”的形式存在的。Python中的字典相当于Java或者C++中的Map对象.
一、字典的主要特性:
1.字典通过键而不是通过索引来读取的
2.字典有时候也称为关联数组或者散列表(hash)。它是听过键讲一系列的值联系起来,这样就可以通过键从字典中获取指定项,但是不能通过索引来获取。
3.字典是任意对象的无序集合
4.字典是无序的,各项是从左到右随机排序的,即保存在字典中的想没有特定的顺序,这样可以提高效率,
5.字典是可变的,并且可以任意嵌套
6.字典可以在原处增长或缩短,无需生成一份备份,并且它支持任意深度的嵌套(即它的值可以是列表或者其他字典)
7.字典中的键必须唯一不允许同一个键出现两次,如果出现两次,则后一个值会被记住。
8.字典中的键必须不可变,,所以可以使用数字、字符串或者元组,但不能使用列表.
二、字典的创建和删除、
定义字典时,每个元素都包含两个部分“键”和“值”,在创建字典时,在“键”和“值”之间使用冒号进行分割,相邻元素使用逗号进行分割。语法格式如下:
Dictionary={‘key’:’value’,’key2’:’value’,…,’keyn’:’valuen’}
Dictionary:字典的名称
Key1:表示元素的键,必须是唯一的,并且不可变,可以是字符串、数字、元组。
Value1:表示元素的孩子,可以是任意数据类型,不是必须唯一.
1 dict1={'name':'雨霓同学','Age':'22','Id':'12101184'} 2 print(type(dict1),dict1) 3 输出: 4 <class 'dict'> {'name': '雨霓同学', 'Age': '22', 'Id': '12101184'}
同列表和元祖以这样,在Python中也可以创建空字典,例如:
dictionary={}或者:dictionary=dict()
Python的dict()方法除了可以创建一个空字典外,还可以通过已有的数据快速创建字典,主要表现为以下两种形式:
1. 通过映射函数创建字典
dictionary=dict(zip(list1,list2))
dicrionary:表示字典的名称
Zip()函数:用于将多个列表或者元祖对应位置的元素合为元祖,并返回包含这些内容的zip对象,如果想得到元祖,可以使用tuple()函数将zip对象转换为元组。如果想得到列表,则可以使用list()函数将其转化为列表.
1 list1=['Name','Age','ID'] 2 list2=['雨霓同学','22','12101184'] 3 dict1=dict(zip(list1,list2)) 4 print(dict1) 5 输出: 6 {'Name': '雨霓同学', 'Age': '22', 'ID': '12101184'}
2. 通过给定的“键值对”创建字典
dictionary=dict(key1=value1,key2=value2,….)
dictionary:表示字典的名称
Key1,key2:表示元素的键,必须是唯一的,并且不可变,可以是字符串,数字,或者元祖
Value1,value2:表示元素的值,可以是任何数据类型,不是必须唯一
1 dict1=dict(name='雨霓同学',Age=22,ID=12101184) 2 print(dict1) 3 输出: 4 {'name': '雨霓同学', 'Age': 22, 'ID': 12101184}
在Python中,还可以使用dict对象的fromkeys()方法创建值为空的字典,
dictionary=dict.fromkeys(list1)
dicrionary:字典名称
list1:作为字典的键的列表
1 name_list=['雨霓同学','布谷鸟','1210'] #作为键的列表 2 dict1=dict.fromkeys(name_list) 3 print(dict1) 4 输出: 5 {'雨霓同学': None, '布谷鸟': None, '1210': None}
另外,还可以通过已经存在的元组和列表创建字典。
1 name_tuple=('雨霓同学','布谷鸟','1210') #作为键的元组 2 sign=['哔哩哔哩','Azure','1184'] # 作为值的列表 3 dict1={name_tuple:sign} #创建字典 4 print(dict1) 5 输出 6 {('雨霓同学', '布谷鸟', '1210'): ['哔哩哔哩', 'Azure', '1184']}
字典中的键必须不可变,,所以可以使用数字、字符串或者元组,但不能使用列表,否则会报错。
同列表和元组一样,不再需要的字典可以使用del命令删除整个字典,del dictiomary
此外,如果只是想删除字典的全部元素,可以使用字典对象的clear()方法实现。执行clear()方法后,原字典变为空字典。dictionary.clear()
此外,还可以使用字典对象中的pop()方法删除并返回指定“键”的元素,以及使用字典对象的popitem()删除并返回字典中的一个元素。
三、字典的访问与遍历
1.通过“键值对”访问字典
在Python中,可以直接使用print()函数直接输出字典内容。也可以根据指定的键得到相应的结果,访问字典的元素可以通过下标的方式实现,与列表和元组不同,这里的下标不是索引号,而是键。
1 dict1=dict(name='雨霓同学',Age=22,ID=12101184) 2 print(dict1['name']) 3 输出: 4 雨霓同学
但是在使用这种方法获取指定键的值时,如果指定的键不存在,则会抛出异常.在实际开发中,很可能我们不知道当前存在什么键,所以需要避免该异常的产生,在此,可以使用if语句对不存的情况进行处理,给一个默认值,示例如下:
1 dict1=dict(name='雨霓同学',Age=22,ID=12101184) 2 print('这个人的名字:',dict1['name'] if '' in dict1 else '你在访问什么') 3 输出: 4 这个人的名字: 你在访问什么
此外,Python中推荐的方法是使用字典对象的get()方法获得指定键的值,语法格式如下:
dictionary.get(key,[dafault])
dictionary:字典对象,即要从中获取值的字典;
key:指定的键
default:可选项,用于指定键不存在时,返回一个默认值,如果省略,则返回None
dict1=dict(name='雨霓同学',Age=22,ID=12101184) print('这个人的名字:',dict1.get('name')) print('这个人的名字:',dict1.get('Name','你在干什么')) 输出: 这个人的名字: 雨霓同学 这个人的名字: 你在干什么
2.字典的遍历
字典是以“键值对”的形式存储数据的,所以在使用字典时需要获取到这些“键值对”。Python提供了遍历字典的方法,通过遍历可以获得字典中的全部“键值对”,使用字典对象的items()方法可以获得字典的“键值对”列表。语法格式如下:
dictionary.items()
dictionary:字典对象,返回值为可遍历的“键值对”元组列表。想要获取到具体的“键值对”可以通过for循环遍历改元组列表。示例如下:
1 dict1=dict(name='雨霓同学',Age=22,ID=12101184) 2 for item in dict1.items(): 3 print(item) 4 输出: 5 ('name', '雨霓同学') 6 ('Age', 22) 7 ('ID', 12101184)
如果需要获取到具体的每个键和值,可以使用如下方法:
1 dict1={'雨霓同学':2769433,'Age':220284,'ID':12101184} 2 for key,value in dict1.items(): 3 print(key,'的编号为',value) 4 输出: 5 雨霓同学 的编号为 2769433 6 Age 的编号为 220284 7 ID 的编号为 12101184
在Python中,字典对象还提供了value()和key()方法,用于返回字典的值和键列表,使用方法同items()方法,也需要通过for循环遍历该字典列表,获取相应的值和键。
四、添加、修改和删除字典元素
由于字典是可变序列,所以可以随时在其中添加“键值对”,这和列表类似。其语法格式如下:
dictionary[key]=value
dictionary:表示字典的名称
key:表示要添加的元素,必须是唯一的,并且不可变,可以是字符串、数字或者元组
value:表示元素的值,可以是任何数据类型,不是必须唯一。
1 dict1={'雨霓同学':2769433,'Age':220284,'ID':12101184} 2 dict1["哔哩哔哩"]='2233' 3 print(dict1) 4 输出: 5 {'雨霓同学': 2769433, 'Age': 220284, 'ID': 12101184, '哔哩哔哩': '2233'}
在字典中,“键”必须是唯一的,所以新添加元素的“键”与已经存在的“键”重复,那么将使用新的“值”替换原来该“键”的值,这也相当于修改字典的元素.
当字典的某一个元素不需要时,可以使用del命名将其删除,示例如下:
1 dict1={'雨霓同学':2769433,'Age':220284,'ID':12101184} 2 del dict1["雨霓同学"] 3 print(dict1) 4 输出: 5 {'Age': 220284, 'ID': 12101184}
当删除一个不存在的键时,则会抛出异常.
五、字典推导式
使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式相似,示例如下:
1 import random 2 randomdict= {i :random.randint(10,100) for i in range(1,5)} 3 print(randomdict) 4 输出: 5 {1: 77, 2: 41, 3: 82, 4: 85}