老齐教室

如何使用Python中的字典解析

作者:Jonathan Hsu

翻译:老齐

与本文相关图书推荐:《Python大学实用教程》

本书适合初学者学习使用,书中除了全面介绍了Python语言的有关知识,还包括有大量练习。本书强调学习过程中的工程实践,通过练习引导学习者更多地接触实际开发中使用的工具。


列表解析,是Python中常用的操作,它语法简单,循环速度足够快。但是,你了解字典解析吗?它跟列表解析一样吗?

字典解析,不同于列表解析。

基本语法

让我们通过两个示例,了解一下字典解析的基本语法。

在第一个示例中,创建一个字典,其值为1-10的整数。

1
2
3
4
5
my_nums = {
i: i
for i in range(1,6)
}
print(my_nums) # {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}

下面,创建类似的字典,但是,增加一个条件,只选择奇数作为字典的值。

1
2
3
4
5
6
my_nums = {
str(i): i
for i in range(1,6)
if i % 2 == 1
}
print(my_nums) # {'1': 1, '3': 3, '5': 5}

或许看了上面两个示例,还没有什么感觉,但它们的确是演示字典解析语法规则的好例子。

字典解析与列表解析最大的不同在于,字典解析中药有两个值——一个是键,另外一个是值。因此,字典解析,需要你多思考一下,这或许就是它使用频率不高的原因吧。

下面让我们看看真实开发中遇到的情况。

实战中的字典解析

下面的两个示例,是我常用到的。

  1. 移除缺失值

我喜欢在移除缺失值的时候使用字典解析,最典型的就是移除None。这里需要使用筛选条件,通常这么做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
data = {
"id": 1,
"first_name": "Jonathan",
"middle_name": None,
"last_name": "Hsu"
}
cleaned = {
k:v
for (k,v) in data.items()
if v != None
}
"""
{
'id': 1,
'first_name': 'Jonathan',
'last_name': 'Hsu'
}
"""

上面使用了字典的.items()方法,它以元组的形式返回字典的键值对。

  1. 替代map函数

我比较喜欢map函数,但是,字典解析也能够实现同样的功能,并且它没有那么复杂的语法,比如使用Lambda函数之类的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data = {
"first_name": "Jonathan",
"last_name": "Hsu"
}
mapped = {
k: v.upper()
for (k,v) in data.items()
}
"""
{
'first_name': 'JONATHAN',
'last_name': 'HSU'
}
"""

结论

怎么样?是不是喜欢字典解析了?希望本文能够为你的技能库增加一个工具。


原文链接:https://medium.com/better-programming/how-to-use-python-dictionary-comprehensions-af5cc5c75bba

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

关注微信公众号,读文章、听课程,提升技能