Python零基础入门
Posted Geek_bao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python零基础入门相关的知识,希望对你有一定的参考价值。
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)
{'uestc': None, 'geek': None, 'bao': None}
另外,还可以通过已经存在的元组和列表创建字典。示例代码如下:
name_tuple = ('uestc', 'geek', 'bao')
sign = ['university', 'csdn', 'first']
dict1 = {name_tuple: sign}
print(dict1)
{('uestc', 'geek', 'bao'): ['university', 'csdn', 'first']}
将作为键的元组修改为列表,再创建一个字典,代码如下:
name_tuple = ['uestc', 'geek', 'bao']
sign = ['university', 'csdn', 'first']
dict1 = {name_tuple: sign}
print(dict1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-a5ce8d0447b3> in <module>
1 name_tuple = ['uestc', 'geek', 'bao']
2 sign = ['university', 'csdn', 'first']
----> 3 dict1 = {name_tuple: sign}
4 print(dict1)
TypeError: unhashable type: 'list'
上面将列表作为字典的键产生了异常,这里要注意!!!
同列表和元组一样,不再需要的字典也可以使用del命令删除整个字典。如下:
del dictionary
另外,如果只是想删除字典的全部元素,可以使用字典对象的clear()方法实现。执行clear()方法后,原字典变为空字典。下面的代码将清除字典的全部元素:
dictionary.clear()
除了上面介绍的方法可以删除字典元素,还可以使用字典对象的pop()方法删除并返回指定“键”的元素,以及使用字典对象的popitem()方法删除并返回字典中的一个元素。
8.1.2 通过“键值对”访问字典
在Python中,如果想将字典的内容输出也比较简单,可以直接使用print()函数。例如我们前面用的print(dictionary)
但是在使用字典时,很少直接输出它的内容。一般需要根据指定的键得到相应的结果。在Python中,访问字典的元素可以通过下标的方式实现,与列表和元组不同,这里的下标不是索引号,而是键。
dictionary = dict(uestc = 'university', geek = 'csdn', bao = 'first')
print(dictionary['uestc'])
university
在使用该方法获取键的值时,如果指定的键不存在,将会出现如下异常。
print(dictionary['cc'])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-13-e69f49ba85a9> in <module>
----> 1 print(dictionary['cc'])
KeyError: 'cc'
而在实际开发中,很可能我们不知道当前存在什么键,所以需要避免该异常的产生。具体的解决方法是使用if语句对不存在的情况进行处理,即给一个默认值。代码如下:
print("ccf是什么:", dictionary['ccf'] if '' in dictionary else '字典中无此选项')
ccf是什么: 字典中无此选项
另外,Python中推荐的方法是使用字典对象的get()方法获取指定键的值。语法格式如下:
dictionary.get(key, [default])
其中,dictionary为字典对象,即要从中获取值的字典;key为指定的键;default为可选项,用于指定当指定的“键”不存在时,返回一个默认值,如果省略,则返回None。示例代码如下:
print("uestc是:", dictionary.get('uestc'))
uestc是: university
说明:为了解决在获取指定键的值时,因不存在该键而导致抛出异常,可以为get()方法设置默认值,这样当指定的键不存在时,得到的结果就是指定的默认值。代码如下:
print("ccf是:", dictionary.get('ccf', '字典中无此选项'))
ccf是: 字典中无此选项
8.1.3 遍历字典
字典是以“键值对”的形式存储数据的,所以在使用字典时需要获取到这些“键值对”。Python提供了遍历字典的方法,通过遍历可以获得字典中的全部“键值对”。
使用字典对象的items()方法可以获取字典的“键值对”列表。语法格式如下:
dictionary.items()
其中,dictionary为字典对象;返回值为可遍历的(“键值对”)的元组列表。想要获取到具体的“键值对”,可以通过for循环遍历该元组列表。实例代码如下:
dictionary = {'qq': '2901338265', 'uestc': '123456789', 'ccf': '88888888'}
for item in dictionary.items():
print(item)
('qq', '2901338265')
('uestc', '123456789')
('ccf', '88888888')
上面的代码得到的是元组中的各个元素,如果想要获取到具体的每个键和值,可以使用如下代码遍历:
dictionary = {'qq': '2901338265', 'uestc': '123456789', 'ccf': '88888888'}
for key, value in dictionary.items():
print(key, "的号码是", value)
qq 的号码是 2901338265
uestc 的号码是 123456789
ccf 的号码是 88888888
说明:在Python中,字典对象还提供了values()和keys()方法,用于返回字典的值和键列表,它们的使用方法同items()方法类似,也需要通过for循环遍历该字典列表,获取对应的值和键。
8.1.4 添加、修改和删除字典元素
由于字典时可变序列,所以可以随时在其中添加“键值对”,这和列表类似。向字典中添加元素的语法格式如下:
dictionary[key] = value
参数说明:
dictionary:字典名称
key:表示元素的键,必须是唯一的,并且不可变的,可以是字符串、数字或者元组
value:表示元素的值,可以是任何数据类型,不是必须唯一。
示例代码如下:
dictionary = dict(uestc = ‘university’, geek = ‘csdn’, bao = ‘first’)
dictionary[“hello”] = “world”
print(dictionary)
从上面结果看出,已经添加了一个新元素。
由于在字典中,“键”必须是唯一的,所以如果新添加元素的“键”与已经存在的“键”重复,那么将使用新的“值”替换原来该“键”的值,这也相当于修改字典的元素。示例代码如下:
dictionary = dict(uestc = 'university', geek = 'csdn', bao = 'first')
dictionary["csdn"] = "chengxuyuan"
print(dictionary)
{'uestc': 'university', 'geek': 'csdn', 'bao': 'first', 'csdn': 'chengxuyuan'}
从上面可以看出,并没有添加新元素而是直接对键“csdn”进行了修改。
当字典中的某一个元素不需要时,可以使用del命令将其删除。示例代码如下:
dictionary = dict(uestc = 'university', geek = 'csdn', bao = 'first')
del dictionary["bao"]
print(dictionary)
{'uestc': 'university', 'geek': 'csdn'}
当删除一个不存在的键时,会抛出异常。因此我们可以对代码做如下修改:
dictionary = dict(uestc = 'university', geek = 'csdn', bao = 'first')
if "bao" in dictionary:
del dictionary["bao"]
print(dictionary)
{'uestc': 'university', 'geek': 'csdn'}
8.1.5 字典推导式
使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式类似。示例代码如下:
import random
randomdict = {i: random.randint(10, 100) for i in range(1, 5)}
print("生成的字典为:", randomdict)
生成的字典为: {1: 49, 2: 82, 3: 23, 4: 10}
8.2 集合
Python中的集合同数学中的集合概念类似,也是用于保存不重复元素的。它有可变集合(set)和不可变集合(frozenset)两种。其中,本节介绍的set集合是无序可变序列,而另一种在节中不做介绍。在形式上,集合的所有元素都放在一对大括号“{ }”中,两个相邻元素间使用逗号“,”分隔。集合最好的应用就是去重,因为集合中的每个元素都是唯一的。
说明:在数学中,集合的定义是把一些能够确定的不同的对象看成一个整体,而这个整体就是由这些对象的全体构成的集合。集合通常用大括号“{}”或者大写的拉丁字母表示。集合中最常用的操作就是创建集合,以及集合的添加、删除、交集、并集和差集等运算,下面开始分别介绍一下。
8.2.1集合的创建
在Python中提供了两种创建集合的方法:一种是直接使用“{}”创建;另一种是通过set()函数将列表、元组等可迭代对象转换为集合。推荐使用第二种方法。
1.直接使用“{}”创建
在Python中,创建set()集合也可以像列表、元组和字典一样,直接将集合赋值给变量从而实现创建集合,即直接使用大括号“{}”创建。语法格式如下:
setname = {element 1, element 2, element 3, …, element n}
其中,setname表示集合的名称,可以是任何符合Python命名规则的标识符;element 1、 element 2、element3、element n表示集合中的元素,个数没有限制,并且只要是Python支持的数据类型就可以。
注意:在创建集合时,如果输入了重复的元素,Python会自动只保留一个。
下面代码可创建一个集合:
set1 = {'uestc', 'ccf', 'csdn'}
set2 = {3, 1, 4, 1, 5, 9, 8, 5}
set3 = {'python', 28, ('ccc', 'sss')}
print(set1)
print(set2)
print(set3)
{'ccf', 'uestc', 'csdn'}
{1, 3, 4, 5, 8, 9}
{'python', 28, ('ccc', 'sss')}
说明:由于Python中的set集合时无序的,所以每次输出时元素的排列顺序可能与上面的不同。
2.使用set()函数创建
在Python中,可以使用set()函数将列表、元组等其他可迭代对象转换为集合。set()函数的语法格式如下:
setname = set(iteration)
参数说明:
setname:表示函数名称。
iteration:表示要转换为集合的可迭代对象,可以是列表、元组、range对象等。另外也可以是字符串,如果是字符串,返回的集合将是包含全部不重复的集合。示例代码如下:
set1 = set("csjfakgkaksjgkajkjfk")
set2 = set([3, 3, 3.3, 4])
set3 = set(('ccf', 'uestc'))
print(set1)
print(set2)
print(set3)
{'j', 'c', 'a', 's', 'f', 'k', 'g'}
{3.3, 3, 4}
{'ccf', 'uestc'}
从上面创建集合的结果可以看出,在创建集合时,如果出现了重复元素,那么将只保留一个,如在第一个集合中的k和a都只保留了一个。
注意:在创建集合时,只能使用set()函数实现,而不能使用一对大括号“{}”实现,这是因为在Python中,直接使用一对大括号“{}”表示创建一个空字典。
代码示例如下:
set1 = set(['ccc', 'aaa', 'bbb'])
print(set1)
set2 = set(['fff', 'ggg', 'zz'])
print(set2)
{'aaa', 'bbb', 'ccc'}
{'ggg', 'zz', 'fff'}
注意:再次强调在Python中,创建集合时推荐使用set()函数实现。
8.2.2 集合的添加和删除
集合是可变序列,所以在创建集合后,还可以对其添加或者删除元素。下面开始介绍。
1.向集合中添加元素
向集合中添加元素可以使用add()方法实现。语法格式如下:
setname.add(element)
其中,setname表示要添加元素的集合;element表示要添加的元素内容。这里只能使用字符串、数字及布尔类型的True或者False等,不能使用列表、元组等可迭代对象。
下面看一个代码示例:
cs = set(['os', 'ds', 'net'])
cs.add('sql')
print(cs)
{'os', 'sql', 'ds', 'net'}
2.从集合中删除元素
在Python中,可以使用del命令删除整个集合,也可以使用集合的pop()方法或者remove()方法删除一个元素,或者使用集合对象的clear()方法清空集合,即删除集合中的全部元素,使其变为空集合。示例代码如下:
cs = set(['os', 'ds', 'net', 'sql','ps'])
cs.remove('ps')
print("remove()方法删除ps后的cs:", cs)
cs.pop()
print("使用pop()方法移除一个元素后:", cs)
cs.clear()
print("使用clear()方法清空集合后:", cs)
remove()方法删除ps后的cs: {'net', 'os', 'sql', 'ds'}
使用pop()方法移除一个元素后: {'os', 'sql', 'ds'}
使用clear()方法清空集合后: set()
注意:使用remove()方法时,如果指定的内容不存在,将会抛出异常,所以在移除元素前,最好先判断其是否存在,可使用关键字in实现。
8.2.3 集合的交集、并集和差集运算
集合中最常用的操作就是进行交集、并集和差集运算。进行交集运算时使用“&”符号;进行并集运算时使用“|”符号;进行差集运算时使用“-”符号。下面看看具体代码示例:
cs = set(['os', 'ds', 'net', 'sql','ps'])
print("cs基础学科有:", cs)
cf = set(['os', 'db', 'cc'])
print("cf是", cf)
print("交集运算:", cs & cf)
print("并集运算:", cs | cf)
print("差集运算:", cs - cf)
cs基础学科有: {'ps', 'net', 'os', 'sql', 'ds'}
cf是 {'os', 'cc', 'db'}
交集运算: {'os'}
并集运算: {'ps', 'db', 'os', 'sql', 'cc', 'ds', 'net'}
差集运算: {'ps', 'sql', 'ds', 'net'}
8.3 列表、元组、字典和集合的区别
前面博客我们介绍了列表、元组,本节我们介绍了序列中的字典和集合,下面通过表格对比一下这几个数据序列的差异。
以上是关于Python零基础入门的主要内容,如果未能解决你的问题,请参考以下文章