Python基础

字典

字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。
为了保存具有映射关系的数据,Python 提供了字典,字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value。由于字典中的 key 是非常关键的数据,而且程序需要通过 key 来访问 value,因此字典中的 key 不允许重复。
程序既可使用花括号语法来创建字典,也可使用 dict() 函数来创建字典。实际上,dict 是一种类型,它就是 Python 中的字典类型。

在使用花括号语法创建字典时,花括号中应包含多个 key-value 对,keyvalue 之间用英文冒号隔开;多个 key-value 对之间用英文逗号隔开。

需要指出的是,元组可以作为 dict 的 key,但列表不能作为元组的 key。这是由于 dict 要求 key 必须是不可变类型,但列表是可变类型,因此列表不能作为元组的 key。

>>> scores = {'Math': 90, 'English': 91}
>>> scores
{'Math': 90, 'English': 91}

在使用 dict() 函数创建字典时,可以传入多个列表或元组参数作为 key-value 对,每个列表或元组将被当成一个 key-value 对,因此这些列表或元组都只能包含两个元素。

>>> scores = [('Math', 90), ('English', 91)]
>>> dict(scores)
{'Math': 90, 'English': 91}
>>> scores = [['Math', 90], ['English', 91]]
>>> dict(scores)
{'Math': 90, 'English': 91}

还可通过为 dict 指定关键字参数创建字典,此时字典的 key 不允许使用表达式。

>>> dict(Math = 90, English = 91)
{'Math': 90, 'English': 91}

字典的基本用法

字典包含多个 key-value 对,而 key 是字典的关键数据,因此程序对字典的操作都是基于 key 的。基本操作如下:

  • 通过 key 访问 value 。
  • 通过 key 添加 key-value 对。
  • 通过 key 删除 key-value 对。
  • 通过 key 修改 key-value 对。
  • 通过 key 判断指定 key-value 对是否存在。
  • 通过 key 访问 value 使用的也是方括号语法,就像前面介绍的列表和元组一样,只是此时在方括号中放的是 key,而不是列表或元组中的索引。

如果要为 dict 添加 key-value 对,只需为不存在的 key 赋值即可。
如果对 dict 中存在的 key-value 对赋值,新赋的 value 就会覆盖原有的 value,这样即可改变 dict 中的 key-value 对。
如果要删除宇典中的 key-value 对,则可使用 del 语句。
如果要判断字典是否包含指定的 key,则可以使用 in 或 not in 运算符。需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的。

>>> scores = {'Math': 90, 'English': 91}
>>> scores['Math']
90
>>> del scores['Math']
>>> 'Math' in scores
False

字典的 key 是它的关键。换个角度来看,字典的 key 就相当于它的索引,只不过这些索引不一定是整数类型,字典的 key 可以是任意不可变类型。

可以这样说,字典相当于索引是任意不可变类型的列表:而列表则相当于 key 只能是整数的字典。因此,如果程序中要使用的字典的 key 都是整数类型,则可考虑能否换成列表。

此外,还有一点需要指出,列表的索引总是从 0 开始、连续增大的;但字典的索引即使是整数类型,也不需要从 0 开始,而且不需要连续。因此,列表不允许对不存在的索引赋值:但字典则允许直接对不存在的 key 赋值,这样就会为字典增加一个 key-value 对。

字典的常用方法

clear

clear() 用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典。

>>> scores = {'Math': 90, 'English': 91}    # 以下scores初始均为此
>>> scores.clear()
>>> scores
{}

get

get() 方法其实就是根据 key 来获取 value,它相当于方括号语法的增强版,当使用方括号语法访问并不存在的 key 时,字典会引发 KeyError 错误;但如果使用 get() 方法访问不存在的 key,该方法会简单地返回 None,不会导致错误。

>>> scores.get("Math")
90
>>> type(scores.get('Physics'))
<class 'NoneType'>

update

update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update() 方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去。

>>> scores.update({'English': 100, 'Physics': 95})
>>> scores
{'Math': 90, 'English': 100, 'Physics': 95}

items()、keys()、values()

items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value。这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象,Python 不希望用户直接操作这几个方法,但可通过 list() 函数把它们转换成列表。

>>> scores.items()
dict_items([('Math', 90), ('English', 91)])
>>> type(scores.values())
<class 'dict_values'>
>>> list(scores.keys())[0]
'Math'

pop

pop() 方法用于获取指定 key 对应的 value,并删除这个 key-value 对。

>>> scores.pop('Math')
90
>>> scores
{'English': 100, 'Physics': 95}

setdefault

setdefault() 方法也用于根据 key 来获取对应 value 的值。但该方法有一个额外的功能,即当程序要获取的 key 在字典中不存在时,该方法会先为这个不存在的 key 设置一个默认的 value,然后再返回该 key 对应的 value。

总之,setdefault() 方法总能返回指定 key 对应的 value;如果该 key-value 对存在,则直接返回该 key 对应的 value;如果该 key-value 对不存在,则先为该 key 设置默认的 value,然后再返回该 key 对应的 value。

>>> scores.setdefault('Math', 0)
90
>>> scores.setdefault('Physics', 0)
0

fromkeys

fromkeys() 方法使用给定的多个 key 创建字典,这些 key 对应的 value 默认都是 None;也可以额外传入一个参数作为默认的 value。该方法一般不会使用字典对象调用(没什么意义),通常会使用 dict 类直接调用。

>>> dict.fromkeys(['Math', 'English'])
{'Math': None, 'English': None}

格式化字符串

>>> 'Name: %(name)s, Math score: %(Math)d, mean: %(mean)010.2f'%{'name': 'chris', 'Math': 90, 'mean': 85.5}
'Name: chris, Math score: 90, mean: 0000085.50'
posted @ 2020-03-14 18:12  crj1998  阅读(75)  评论(0)    收藏  举报