Python数据分析基础
八、字典与集合
8.1 字典
字典和列表类似,也是可变序列,不过与列表不同,它是无序的可变序列,保存的内容是以“键值对”的形式存放的。这类似于一本字典,可以把拼音和汉字关联起来。通过音节表可以快速查找想要的汉字。其中,字典的音节表相当于键(key),而对应的汉字就相当于值(value)。键是唯一的,而值可以是多个。字典在定义一个包含多个命名字段的对象时,很有用。
说明:Python中的字典相当于Java或者C++中的Map对象。
字典的主要特征如下:
- 通过键而不是通过索引来读取:
字典有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。 - 字典是任意对象的无序集合:
字典是无序的,各项是从左到右随机排序的,即保存在字典中的项没有特定的顺序,这样可以提高查找的效率。 - 字典是可变的,并且可以任意嵌套:
字典可以在原处增长或者缩短(无须生成一份备份),并且它支持任意深度的嵌套(即它的值可以是列表或者其他字典)。 - 字典中的键必须唯一
不允许同一个键出现两次,如果出现两次,则后一个值会被记住。 - 字典中的键必须不可变
字典中的键是不可变的,所以可以使用数字、字符串或者元组,但不能使用列表。
8.1.1 字典的创建和删除
定义字典时,每个元素都包含两个部分“键”和“值”。以水果名称和价钱的字典为例,键为水果名称,值为水果价格。如下图所示。
创建字典时,在“键”和“值”之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素放在一个“{}”中。语法格式如下:
dictionary = {‘key1’: ‘value1’, ‘key2’: ‘value2’, …, ‘keyn’: ‘valuen’,}
参数说明:
dictionary:字典名称
key1、key2…keyn:表示元素的键,必须是唯一的,并且不可变的,可以是字符串、数字或者元组
value1、value2…valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
下面看一个通讯录的字典样式:
dictionary = {
'qq': '2901338265', 'uestc': '123456789', 'ccf': '88888888'}
print(dictionary)
{'qq': '2901338265', 'uestc': '123456789', 'ccf': '88888888'}
同列表和元组一样,在Python中也可以创建空字典。使用下面两种方法创建空字典:
dictionary = {}
或者
dictionary = dict()
Python的dict()方法除了可以创建一个空字典外,还可以通过已有数据快速创建字典。主要表现为以下两种形式:
1.通过映射函数创建字典,语法如下:
dictionary = dict(zip(list1, list2))
参数说明:
dictionary:表示字典名称。
zip()函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip()对象。如果想得到元组,可以使用tuple()函数将zip对象转换为元组;如果想得到列表,则可以使用list()函数将其转换为列表。
说明:在Python 2.x中,zip()函数返回的内容为包含元组的列表。
下面看看Python3中的代码示例:
name = ['uestc', 'geek', 'bao']
sign = ['university', 'csdn', 'first']
dictionary = dict(zip(name, sign))
print(dictionary)
{'uestc': 'university', 'geek': 'csdn', 'bao': 'first'}
2.通过给定的“键值对”创建字典,语法如下:
dictionary = dict(key1=value1, key2=value2, …, keyn=valuen)
参数说明:
dictionary:字典名称
key1、key2…keyn:表示元素的键,必须是唯一的,并且不可变的,可以是字符串、数字或者元组
value1、value2…valuen:表示元素的值,可以是任何数据类型,不是必须唯一。
代码示例如下
dictionary = dict(uestc = 'university', geek = 'csdn', bao = 'first')
print(dictionary)
{'uestc': 'university', 'geek': 'csdn', 'bao': 'first'}
在Python中还可以使用dict对象的fromkeys()方法创建值为空的字典,语法如下:
dictionary = dict.fromkeys(list1)
参数说明:
dictionary:表示字典
list1:表示作为字典的键的列表
示例代码如下:
name_list = ['uestc', 'geek', 'bao']
dictionary = dict.fromkeys(name_list)
print(dictionary