type
status
date
slug
summary
tags
category
icon
password
特点:花括号{}括起来,以键值对(key-value)形式存在用来存储,每一个键值对称为Item,也称为Entry;字典是可变的,无序的,key不重复的键值对集合。
对键的约束:
- 键是唯一的,不可能有两个元素具有相同的键
- 键是不可变的,所以键不能是列表(键必须是不可变类型)
4.1 创建字典
使用 dict() 函数创建字典,可以传入多个列表或元组参数作为 key-value 对,每个列表或元组将被当成一个 key-value 对,因此这些列表或元组都只能包含两个元素
4.2 字典的基本操作
元素访问
- d[key]
- 返回key对应的值value
- d.get(key[,defualt])
- 返回key对应值value,不对字典本身修改
- key不存在返回缺省值,如果没有缺省值就返回None
- d.setdefualt(key[,default])
- 返回key对应值value,对字典就地修改
- key不存在,添加kv对,value为default,并返回default,如果没有default,缺省值为None
keys()、values()和 items()方法
keys()、values()和 items()方法分别返回字典的键,值,键值对。
上面方法返回的并非是列表,items返回的值是包含键值的元组。如果想要返回列表就需要把返回值传递给list函数。
元素增改
- d[key] = value
- 存在key,则将对应值改为value,不存在则新增键值对
- d.update([other]) → None
- 使用另一个字典的kv对来更新字典,就地修改
- key存在就修改,key不存在就添加
元素判定
- key [not] in d
- 判定键key是否在字典d中
元素删除
- del dict
- 删除字典;标识符取消了,dict指向的字典对象引用计数减1,如果引用计数清0,gc清理
- del dict[key]
- 删除字典元素
- dict.pop(key[,default])
- 弹出kv对并返回value值
- key不存在也没有缺省值会报错,key不存在有缺省值返回缺省值。
- dict.popitem()
- 随机弹出item,但不能为空,返回二元组(key,value)
- dict.clear()
- 清空字典内元素,返回空字典
元素遍历(重点)
Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象
- Dictionary view对象,可以使用len()、iter()、in等操作
- 字典的entry的动态的视图,字典变化,视图将反应出这些变化
- keys方法返回一个类set对象,也就是可以看做一个set集合。如果values都可以hash,那么items也可以看作是类set对象
问题:遍历字典时删除不需要的kv对问题。
4.3 key理解
字典的key和set的元素要求一致
- set的元素可以就是看作是key,set可以看作dict的简化版
- hashable可哈希才可以作为key,可以使用hash()测试
- 使用key访问,就如同列表使用index访问一样,时间复杂度都是O(1)
4.4 有序性(OrderedDict)和defaultdict
在Python 3中,字典在3.7开始,支持记录kv对中k的录入顺序功能,在此之前字典无序的,在对字典进行遍历时,是按照字典中元素的录入顺序来遍历的。
在3.7之前为了解决字典的录入顺序问题,可以通过collections模块的OrderedDict类来解决。
在访问字典时,如果访问不存在的key会抛出异常,而通过collections模块的defaultdict类创建字典,在访问一个没有的key时不会抛出异常,而是返回一个默认值,这个默认值可以在创建defaultdict对象时指定,也可以使用默认值工厂函数来生成。这样可以避免在访问字典时需要先判断key是否存在,从而简化代码。
4.5嵌套
有时候需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。
比如:字典alien_0只包含一个外星人的信息,如何存储众多外星人信息
4.5.1列表嵌套字典
4.5.2字典嵌套列表
4.5.3字典嵌套字典
4.6 数据类型转换
- int(x) 将字符串/浮点数转换成整数
- float(x)将字符串/整数转换成一个浮点数
注:
1.浮点数与整数运算,Python会自动将整数转换成浮点数,得到浮点数结果
2.圆整:round(8.5)的结果是8。Python圆整策略是:将小数部分为.5的数字圆整到最接近的偶数(银行家圆整)
3.将字符串转换成整数/浮点数,int(x),float(x)假设他们看着像Python 整数/浮点数,如果不是这样,会出错
- str(x)将对象x转换为字符串
- tuple(s)将序列转换为一个元组
- list(s)将序列转换成一个列表
- eval(str)将字符串转换成相对应的数据类型