Python dict 笔记

介绍

字典(dict)是Python内置提供的一种常用数据结构,他用于存放具有映射(mapping)关系的数据。

可变对象。

dict 常用操作

创建

两种方式,使用dict()函数创建字典;使用花括号语法创建字典。

dict1 = {}
dict2 = dict() # 创建了一个空字典

dict的key必须为不可变类型,所以字符串、元组等类型可以作为dict的key,但像列表这种可变类型,不能作为dict的key

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

>>> person = [('age', 18), ('sex', 'male'), ('name', 'gyj')]  # 这里换成person = [['age', 18], ['sex', 'male'], ['name', 'gyj']]也是可以的
>>> dict3 = dict(person)
>>> dict3
{'age': 18, 'sex': 'male', 'name': 'gyj'}

通过key访问value

三种方式:

  • 通过方括号语法访问
  • 使用get方法
  • 使用setdefault()方法

这三者不同的地方在于:

  • 使用方括号语法访问并不存在的key时,字典会引发KeyError错误
  • 但如果使用get()方法访问不存在的key,该方法会简单地返回None,不会导致错误
  • 使用setdefault(),当程序要获取的 key 在字典中不存在时,该方法会先为这个不存在的 key 设置一个默认的 value,然后再返回该 key 对应的 value。
scores = {'语文': 89}
# 通过key访问value
scores.get('语文') # 89
scores.get('数学') # None
scores['数学'] # KeyError
scores.setdefault('数学', 0) # 0
scores.setdefault('语文', 0) # 89

通过key添加k-v对

例如:

scores['数学'] = 93

通过key删除k-v对

使用del语句删除k-v对

del scores['语文']

通过key修改k-v对

两种方式:对存在的key-value对赋值,改变key-value对;使用update方法

scores['数学'] = 95
scores.update({'数学':100}) # 如果update的key不存在,那么会增加一个新的k-v对

判断指定key是否存在

使用in或not in 运算符判断key是否存在

'数学' in scores  # True
'数学' not in scores # False

清空字典中所有的k-v对

scores.clear()

获取dict所有k-v对,所有key,所有value

items():获取字典中的所有 key-value 对

keys():获取字典中的所有 key

values():获取字典中的所有 value

这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象,Python 不希望用户直接操作这几个方法,但可通过 list() 函数把它们转换成列表。

>>> scores = {'数学': 96, '英语': 88}
>>> scores.items()
dict_items([('数学', 96), ('英语', 88)])
>>> list(scores.items())
[('数学', 96), ('英语', 88)]

弹出指定key的k-v对

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

math_score = scores.pop('数学')

随机弹出k-v对

popitem() 方法用于随机弹出字典中的一个 key-value 对。

此处的随机其实是假的,正如列表的 pop() 方法总是弹出列表中最后一个元素,实际上字典的 popitem() 其实也是弹出字典中最后一个 key-value 对。由于字典存储 key-value 对的顺序是不可知的,因此开发者感觉字典的 popitem() 方法是“随机”弹出的,但实际上字典的 popitem() 方法总是弹出底层存储的最后一个 key-value 对。

根据给定的多个key创建字典

fromkeys() 方法使用给定的多个 key 创建字典,参数可以是list也可以是tuple,这些 key 对应的 value 默认都是 None;也可以额外传入一个参数作为默认的 value。

# 使用列表创建包含2个key的字典
a_dict = dict.fromkeys(['a', 'b'])
print(a_dict) # {'a': None, 'b': None}

# 使用元组创建包含2个key的字典,指定默认的value
c_dict = dict.fromkeys((13, 17), 'good')
print(c_dict) # {13: 'good', 17: 'good'}

使用字典格式化字符串

举例:

# 字符串模板中使用key
temp = '教程是:%(name)s, 价格是:%(price)010.2f, 出版社是:%(publish)s'
book = {'name':'Python基础教程', 'price': 99, 'publish': 'C语言中文网'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
book = {'name':'C语言小白变怪兽', 'price':159, 'publish': 'C语言中文网'}
# 使用字典为字符串模板中的key传入值
print(temp % book)

参考资料

  1. Python字典及基本操作(超级详细)
  2. 《Python 学习手册(第四版)》
文章作者: Met Guo
文章链接: https://guoyujian.github.io/2021/12/28/Python-dict-%E7%AC%94%E8%AE%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gmet's Blog