12.1.1 理解字典类型
在日常生活中,我们常常会接触到“字典”这种数据类型,例如一本书籍的目录结构,在目录结构中,通过查找页码,就可以快速翻到指定的页面。
如果没有这样的页码,那么我们必须从书籍的第一页开始,一页一页地查找。有了页码以后,直接翻到指定的页面。在Python中,可以通过字典来进行快速地查找。
Python中的字典类型是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。
字典中的元素是一个键值对:
# 定义一个字典变量bookbook = {"第十二章-彻底掌握Python的字典类型": 210}在上文代码中定义了一个字典类型变量book, book中只有一个元素。元素以英文冒号进行分隔。在冒号左边的为键名,冒号右边的为键值。book中的键名表示书籍的章节目录名称,键值表示章节目录的页码。字典中的键名是唯一的,就如同在一本书籍中,不会出现相同的目录。
字典中的键名是唯一的,在列表和元组中可以保存多个相同的元素值。
12.1.2 字典的类型名
在交互模式中通过type来输出字典的类型名:
>>> book = {"第十二章-彻底掌握Python的字典类型": 210}>>> type(book)<class 'dict'>
从输出可知,字典的类型名为dict。
12.1.3 字典的定义
对字典进行定义,主要有对象定义法和直接定义法。
(1) 对象定义法
字典的类型名是dict,可以直接在交互模式中执行help(dict)来查找dict的定义及用法:
class dict(object)| dict() -> new empty dictionary| dict(mapping) -> new dictionary initialized from a mapping object's| (key, value) pairs| dict(iterable) -> new dictionary initialized as if via:| d = {}| for k, v in iterable:| d[k] = v| dict(**kwargs) -> new dictionary initialized with the name=value pairs| in the keyword argument list. For example: dict(one=1, two=2)
从交互模式的输出中,可看到如下四个定义字典的构造方法:
(1) dict()(2) dict(mapping)(3) dict(iterable)(4) dict(**kwargs)
1.dict()
使用dict()构造一个空的字典。
代码实例:
# __desc__ = 通过dict()构造一个空的字典 # 定义一个空的字典 book = dict() # 空值在条件判断中会自动转换为布尔类型False if book: print("book is not empty") else: print("book is empty")2. dict(mapping)
使用mapping对象中的(key, value)键值对来构造一个有值的字典对象。mapping对象是一个从键名到键值的映射类型。在Python中可以通过zip类型构造一个mapping格式的对象, 给zip构造方法传递两个可迭代对象,例如:zip(iter1, iter2), 左边的可迭代对象iter1表示的是键名,右边的可迭代对象iter2表示的是键值,iter1中的键名与iter2中的键值一一对应。
代码实例:
# __desc__ = 使用zip类型来定义一个mapping对象 # zip接受两个可迭代对象 # 元组是一种可迭代对象 # 迄今学过的可迭代对象有字符串,列表,元组 mapping = zip(("第十二章-彻底掌握Python的字典类型",), (210,)) # 使用mapping对象来构造字典对象 book = dict(mapping) # book的输出为{"第十二章-彻底掌握Python的字典类型": 210}Python中的字典类型就是一种标准的mapping对象,我们可以在dict方法中传递一个字典对象来构造字典。
代码实例:
# __desc__ = 使用字典类型来构造一个mapping对象 pair = {"第十二章-彻底掌握Python的字典类型": 210} # 使用mapping对象来构造字典对象 book = dict(pair) # book的输出为{"第十二章-彻底掌握Python的字典类型": 210}3. dict(iterable)
这里的iterable表示的是可迭代对象,可迭代对象存储了每一个键值对,键值对以列表或元组的形式存储于这个可迭代对象中。可迭代对象既可以是列表,也可以是元组。可迭代对象是列表的情况:
# 1.列表中保存的是列表 [[key, value],[key,value]] # 2.列表中保存的是元组 [(key, value),(key,value)]可迭代对象是元组的情况:
# 1.元组中保存的是列表: ([key, value],[key,value]) # 2.元组中保存的是元组: ((key, value),(key,value))代码实例:
# __desc__ = 通过可迭代对象来构造字典 book = dict([["第十二章-彻底掌握Python的字典类型", 20]]) # book的输出为{"第十二章-彻底掌握Python的字典类型": 210} book = dict((("第十二章-彻底掌握Python的字典类型", 20),)) # book的输出为{"第十二章-彻底掌握Python的字典类型": 210}4.dict(**kwargs)
这种构造方式是直接采用name=value的关键字参数形式来对字典进行构造,name表示的是键名,value表示的是键值,name必须符合变量名的规则, value必须是Python中的合法数据类型。
代码实例:
# 在dict构造方法中,name=value即表示一个键值对 book = dict(name="108节课彻底学通Python") # book的输出为{"name": "108节课彻底学通Python"}(2) 直接定义法
直接定义法是指直接通过字典的别名符号{}来进行定义。在{}中,键值对以英文逗号进行分隔。
代码实例:
# __desc__ = 直接通过{}来构造字典 # 构造一个空的字典 book = {} # 构造一个有值的字典 book = {"name": "108节课彻底学通Python", "price": 0}
12.1.4 字典的主要性质
字典跟列表一样,都是可变的数据类型。同时字典也是一种可迭代类型,可在for循环中迭代字典的键名。迭代字典对象的for循环结构:
for name in dict: pass代码实例:
# __desc__ = 在for循环中迭代字典的键名 # 构造一个有值的字典 book = {"name": "108节课彻底学通Python", "author": "薯条老师"} for name in book: # 执行dict[name]的语法,可以访问字典的键值 print(name, book[name])
12.1.5 最具实力的小班培训
薯条老师在广州有开设线下培训班,小班授课模式,一班最多6个人。也可一对一授课,全程帮助你学好计算机,实现高薪就业。不在广州的同学可提供住宿,也可以报名线上小班,用腾讯会议上直播课。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python高级爬虫+安卓逆向工程师就业班,月薪15K-25K,包拿Offer
(3) Python数据分析+商业分析+数据科学就业班,企业级项目实战,月薪10K-20K
(4) Python量化交易就业班,A股+期货+数字货币量化,月薪10K-40K
(5) Python机器学习+深度学习算法工程师,月薪20-50K
跟薯条老师学习的学生有拿到花生日记,林氏家居,南方电网,中国邮政集团,京东, 阿里等公司的offer, 学生的最低薪资有6K,最高薪资有18K, 平均就业薪资有11000。
扫码咨询薯条老师: