1.12 字典(Python)

本文来自异想之旅公开发布的Python教程,原文地址:https://www.yuque.com/yxzl/python

在前面的学习中,我们接触了“存储数据的容器”变量和“存储多个数据的容器”列表。然而在实际的使用中,更多的情况下我们并不在意列表所能提供的数据的有序性,更在意能否快速根据给定的信息查询相关数据:例如根据姓名查询身份证号、根据班级查询学生……

这就需要用到字典这种东西了。

简单的示例

# 本代码以上文提到的“根据姓名查询身份证号”的功能为例

# 我们使用大括号定义一个字典
data = {'小明': '370202xxxxxxxxxxxx', '小红': '620104xxxxxxxxxxxx'}

# 我们使用像访问列表一样的中括号访问字典中的数据
# 例如 data[x] ,其中 x 表示要访问的键,程序会返回对应的值
print(data['小明'])
print(data['小红'])

程序输出:

370202xxxxxxxxxxxx
620104xxxxxxxxxxxx

字典由**键值对(key-value pairs)**构成。格式:{a1: b1, a2: b2, ...},其中 a 表示键(key),b 表示值(value),a 与 b 共同组成键值对。

当然,键值对的数据类型不仅仅局限于字符串。键的类型可以是int``float``str``bool可哈希固定的类型,值可以是任意的值或 Python 对象。

名词解释:哈希,……,嗯好吧这个不太好通俗解释,维基百科解释为“一种从任何一种数据中创建小的数字‘指纹’的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。”。其重点一个是“指纹”所表明的唯一性(不重复性),另一个也还是上面说到的确定性。
以上提到的四种类型再加上tuple几乎是你可以接触到的 Python 内置的所有符合键要求的类型,更多的类型需要手动去定义。
“值可以是任意的值或 Python 对象”这句话并不严谨,事实上包括str甚至int等在内,Python 的一切都是对象。具体概念你将在本书的第二部分了解到。

键值对的增加和修改

增加和修改的格式一样,直接使用形如dict[key] = value的语句即可;对于已经存在的键值对,也可以直接当作变量操作,例如dict[key] += 1

具体请看如下示例:

child = {'name': 'Yxzl', 'age': 8, 'weight': '25kg'}

# 添加一个新的键值对
child['height'] = '150cm'
# 对已有的键值对的值进行修改
child['age'] += 1
child['weight'] = '30kg'

print(child)  # {'name': 'Yxzl', 'age': 9, 'weight': '30kg', 'height': '150cm'}

此处有一个事情需要注意:Python 字典的键值对是不保证有序的。

键值对的访问

来看一个示例:

a = {'a': 1, 'b': 2}
print(a['c'])

输出:

Traceback (most recent call last):
  File "/path/to/example.py", line 2, in <module>
    print(a['c'])
KeyError: 'c'

可以看到,我们访问了a中不存在的键'c',程序运行时抛出了键错误,也就是说通过我们提供的键找不到对应的键值对,自然也找不到对应的值。

在真实的使用中,很多时候我们无法确定字典中是否有我们所查找的值。如果直接使用方括号去访问,程序找不到数据就抛出错误终止程序,这往往并不是我们期望的。因此,Python 提供了一种更优雅的方式来获取字典中的数据:

a = {'a': 1, 'b': 2}

print(a.get('a'))  # 输出:1
print(a.get('c'))  # 输出:None
print(a.get('c', -1))  # .get()的第二个参数指定找不到对应数值时返回的默认值,输出:-1

这样子即便找不到键值对也不会抛出错误啦,判断键值对是否存在只需要if dict.get(key) is None即可(关于is语句的用法将在第二部分面向对象中具体讲解)。

字典遍历

我们可以使用for循环遍历字典中的键值对。这里我们会用到一个略有不同的语句结构for i, j in ...,想要真正理解它需要元组相关的知识,我将看心情写在第二部分中,此处还是先作为固定格式记忆好啦。

child = {'name': 'Yxzl', 'age': 8, 'weight': '25kg'}

print('Keys:')
for i in child.keys():  # 遍历字典中的键
    print(i)

print()

print('Values:')
for i in child.values():  # 遍历字典中的值
    print(i)

print()

print('Key-Value Pairs:')
for i, j in child.items():  # 遍历字典中的键值对
    print(i, j)

程序输出:

Keys:
name
age
weight

Values:
Yxzl
8
25kg

Key-Value Pairs:
name Yxzl
age 8
weight 25kg

字典方法

一看就懂,还是直接上代码~

a = {'a': 1, 'b': 2, 'c': 3}

print(len(a))  # 获取字典的长度(即键值对的个数),输出:3

print(a.pop('a'))  # 通过键删除对应的键值对,返回对应键值对的值,输出:1
print(a)  # 输出:{'b': 2, 'c': 3}

print('a' in a, 'b' in a)  # 判断字典中是否存在某个键,输出:False True

b = {'d': 4, 'e': 5, 'f': 6}
a.update(b)  # 合并字典,将b中的键值对更新到a中
print(a)  # 输出:{'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

a.clear()  # 清空字典
print(a)  # 输出:{}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异想之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值