说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
字典 (dict,全称:dictionary)是 Python 重要的数据结构。在客观世界中,所有的事件都有它的属性和属性对应的值,如「花」,它的颜色是红色,有五个花瓣。其中颜色和花瓣数量是属性,红色和 5 是值。我们把属性(key)和值(value)组成「键值对」(key-value)这样的数据结构。
基本结构:
{k1:v1, k2:v2, k3:v3, k4:v4, ...}
k:v
k
不能重复,但不报错,最后的会覆盖k
的取值一般是字符、数字等,像元组其实也是可以的,基本没有使用场景v
的取值可以是字符、数字、元组、列表、字典等所有类型定义方法:
d = {} # 定义空字典
d = dict() # 定义空字典
d = {'a': 1, 'b': 2, 'c': 3}
d = {'a': 1, 'a': 1, 'a': 1} # { 'a': 1} key 不能重复, 取最后一个
d = {'a': 1, 'b': {'x': 3}} # 嵌套字典
d = {'a': [1,2,3], 'b': [4,5,6]} # 嵌套列表
# 以下均可定义如下结果
# {'name': 'Tom', 'age': 18, 'height': 180}
d = dict(name='Tom', age=18, height=180)
d = dict([('name', 'Tom'), ('age', 18), ('height', 180)])
d = dict(zip(['name', 'age', 'height'], ['Tom', 18, 180]))
d['name'] # 'Tom' 获取键的值
d['age'] = 20 # 将 age 的值更新为 20
d['Female'] = 'man' # 增加属性
d.get('height', 180) # 180
# 嵌套取值
d = {'a': {'name': 'Tom', 'age':18}, 'b': [4,5,6]}
d['b'][1] # 5
d['a']['age'] # 18
# 注意,这不是切片操作
d = {0: 10, 2: 20}
d[0]
# 10
使用 in
检验一个 key 是否在字典中:
'a' in d # True 'a' 作为 k 在 d 中
2 in d # False
d.pop('name') # 'Tom' 删除指定 key
d.popitem() # 随机删除某一项
del d['name'] # 删除键值对
d.clear() # 清空字典
# 按类型访问,可迭代
d.keys() # 列出所有 key
d.values() # 列出所有 值
d.items() # 列出所有值对元组(k, v)
# 操作
d.setdefault('a', 3) # 插入一个键,给字默认值, 不指定为 None
d1.update(dict2) # 将字典 dict2 的键值对添加到字典 dict
# 对于键(key)存在则返回其对应值,如果键不在字典中,则返回默认值
d.get('math', 100) # 100
d2 = d.copy() # 浅拷贝
# update 更新方式
d = {}
d.update(a=1)
d.update(c=2, d=3)
d
# {'a': 1, 'c': 2, 'd': 3}
其他函数:
d = {'a': 1, 'b': 2, 'c': 3}
max(d) # 'c' 最大的 k
min(d) # 'a' 最小的 k
len(d) # 3 字典的长度
str(d) # "{'a': 1, 'b': 2, 'c': 3}" 字符串形式
any(d) # True 只要一个键为 True
all(d) # True 所有键都为 True
sorted(d) # ['a', 'b', 'c'] 所有key当列表排序
d = {'a': 1, 'b': 2, 'c': 3}
for i in d:
print(i)
# a
# b
# c
# 遍历 key
for i in d.keys():
print(i)
# 结果同上
# 遍历值
for i in d.values():
print(i)
# 1
# 2
# 3
# 遍历键值组成元组
for i in d.items():
print(i)
# ('a', 1)
# ('b', 2)
# ('c', 0)
# 分别取键值遍历
for k,v in d.items():
print(k, v)
# a 1
# b 2
# c 0
x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}
z = {**x, **y}
z
# {'c': 4, 'a': 1, 'b': 3}
# {**y, **x} 试试调换位置
还可以用 |
符号来做合并操作,这个方法在 Python 3.9+ 中才可用:
x | y
# 合并后更新到 x
x |= y
利用推导式生成新的字典:
d = {i: i*10 for i in range(1,5)}
# {1: 10, 2: 20, 3: 30, 4: 40}
# 键值互换
d = {'name': 'Tom', 'age': 18, 'height': 180}
{v:k for k,v in d.items()}
# {'Tom': 'name', 18: 'age', 180: 'height'}
对于一些逻辑分支功能,字典可以做路由,免去编写if else
语句:
route = {True: 'case1', False: 'case2'} # 定义路由
route[7>6] # 'case1' 传入结果为布尔的变量、表达式、函数调用
# 定义计算方法
cal = {'+': lambda x,y: x+y, '*':lambda x,y: x*y}
cal['*'](4,9) # 36 使用
在 Python 3.6 版之前字典不会保留插入顺序,在 CPython 3.6 中插入顺序会被保留,但这在当时被当作是一个实现细节而非确定的语言特性。在 3.7 版本中,dict 对象会保持插入时的顺序这个特性 正式宣布 成为 Python 语言官方规范的一部分。
如果想定义一个字符串映射表,可以考虑 str.maketrans()。
关于 dict() 内置函数,可以访问 dict() 查看详情。
更新时间:2024-05-18 16:48:29 标签:python 字典