自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
在Python中,字典与列表类似,也是可变序列,不过与列表不同,它是无序的可变序列,保存的内容是以“键-值对”的形式存放的。这类似于我们的新华字典,它可以把拼音和汉字关联起来,通过音节表可以快速找到想要的汉字。其中新华字典里的音节表相当于键(key),而对应的汉字,相当于值(value)。键是唯一的,而值可以有多个。字典在定义一个包含多个命名字段的对象时,很有用。
字典的主要特征如下:
l 通过键而不是通过索引来读取
字典有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。
l 字典是任意对象的无序集合
字典是无序的,各项是从左到右随机排序的,即保存在字典中的项没有特定的顺序。这样可以提高查找效率。
l 字典是可变的,并且可以任意嵌套
字典可以在原处增长或者缩短(无须生成一个副本)。并且它支持任意深度的嵌套(即它的值可以是列表或者其他的字典)。
l 字典中的键必须唯一
不允许同一个键出现两次,如果出现两次,则后一个值会被记住。
l 字典中的键必须不可变
字典中的键是不可变的,所以可以使用数字、字符串或者元组,但不能使用列表。
说明:Python中的字典相当于Java或者C++中的Map对象。
定义字典时,每个元素都包含两个部分“键”和“值”。以水果名称和价格的字典为例,键为水果名称,值为水果价格,如图22所示。
图22 字典示意图
创建字典时,在“键”和“值”之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素放在一对“{}”中。语法格式如下:
dictionary = {'key1':'value1', 'key2':'value2', …, 'keyn':'valuen',}
参数说明:
l dictionary:表示字典名称。
l key1、key2…keyn:表示元素的键,必须是唯一的,并且不可变,例如,可以是字符串、数字或者元组。
l value1、value2…valuen:表示元素的值,可以是任何数据类型,不是必须唯一的。
例如,创建一个保存通讯录信息的字典,可以使用下面的代码:
dictionary = {'qq':'84978981','明日科技':'84978982','无语':'0431-84978981'}
print(dictionary)
执行结果如下:
{'qq': '84978981', '明日科技': '84978982', '无语': '0431-84978981'}
同列表和元组一样,也可以创建空字典。在Python中,可以使用下面两种方法创建空字典:
dictionary = {}
或者
dictionary = dict()
Python中的dict()方法除了可以创建一个空字典外,还可以通过已有数据快速创建字典。主要表现为以下两种形式:
(1)通过映射函数创建字典
通过映射函数创建字典的语法如下:
dictionary = dict(zip(list1,list2))
参数说明:
l dictionary:表示字典名称。
l zip()函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。如果想获取元组,可以将zip对象使用tuple()函数转换为元组;如果想获取列表,则可以使用list()函数将其转换为列表。
说明:在Python 2.x中,zip()函数返回的内容为包含元组的列表。
l list1:一个列表,用于指定要生成字典的键。
l list2:一个列表,用于指定要生成字典的值。如果list1和list2的长度不同,则与最短的列表长度相同。
场景模拟:某大学的寝室里住着4位美女,将她们的名字保存在一个列表中,将她们每个人的星座对应保存在另一个列表中。
实例09 创建一个保存女神星座的字典
在IDLE中创建一个名称为sign_create.py的文件,然后在该文件中,定义两个包括4个元素的列表,再应用dict()函数和zip()函数将前两个列表转换为对应的字典,并且输出该字典,代码如下:
name = ['绮梦','冷伊一','香凝','黛兰'] # 作为键的列表
sign = ['水瓶座','射手座','双鱼座','双子座'] # 作为值的列表
dictionary = dict(zip(name,sign)) # 转换为字典
print(dictionary) # 输出转换后字典
运行实例后,将显示如图23所示的结果。
图23 创建一个保存女神星座的字典
(2)通过给定的关键字参数创建字典
通过给定的关键字参数创建字典的语法如下:
dictionary = dict(key1=value1,key2=value2,…,keyn=valuen)
参数说明:
l dictionary:表示字典名称。
l key1,key2,…,keyn:表示参数名,必须是唯一的,并且符合Python标识符的命名规则。该参数名会转换为字典的键。
l value1,value2,…,valuen:表示参数值,可以是任何数据类型,不必须唯一。该参数值将被转换为字典的值。
例如,将实例09中的名字和星座以关键字参数的形式创建一个字典,可以使用下面的代码:
dictionary =dict(绮梦 = '水瓶座', 冷伊一 = '射手座', 香凝 = '双鱼座', 黛兰 = '双子座')
print(dictionary)
在Python中,还可以使用dict对象的fromkeys()方法创建值为空的字典,语法如下:
dictionary = dict.fromkeys(list1)
参数说明:
l dictionary:表示字典名称。
l list1:作为字典的键的列表。
例如,创建一个只包括名字的字典,可以使用下面的代码:
name_list = ['绮梦','冷伊一','香凝','黛兰'] # 作为键的列表
dictionary = dict.fromkeys(name_list)
print(dictionary)
执行结果如下:
{'绮梦': None, '冷伊一': None, '香凝': None, '黛兰': None}
另外,还可以通过已经存在的元组和列表创建字典。例如,创建一个保存名字的元组和保存星座的列表,通过它们创建一个字典,可以使用下面的代码:
name_tuple = ('绮梦','冷伊一', '香凝', '黛兰') # 作为键的元组
sign = ['水瓶座','射手座','双鱼座','双子座'] # 作为值的列表
dict1 = {name_tuple:sign} # 创建字典
print(dict1)
执行结果如下:
{('绮梦', '冷伊一', '香凝', '黛兰'): ['水瓶座', '射手座', '双鱼座', '双子座']}
如果将作为键的元组修改为列表,再创建一个字典,代码如下:
name_list = ['绮梦','冷伊一', '香凝', '黛兰'] # 作为键的列表
sign = ['水瓶座','射手座','双鱼座','双子座'] # 作为值的列表
dict1 = {name_list:sign} # 创建字典
print(dict1)
执行结果如图24所示。
图24 将列表作为字典的键产生的异常
同列表和元组一样,不再需要的字典也可以使用del命令删除整个字典。例如,通过下面的代码即可将已经定义的字典删除。
del dictionary
另外,如果只是想删除字典的全部元素,可以使用字典对象的clear()方法实现。执行clear()方法后,原字典将变为空字典。例如,下面的代码将清除字典的全部元素。
dictionary.clear()
除了上面介绍的方法可以删除字典元素,还可以使用字典对象的pop()方法删除并返回指定“键”的元素,以及使用字典对象的popitem()方法删除并返回字典中的一个元素。