作者:Jonathan Hsu
翻译:老齐
列表解析,是Python中常用的操作,它语法简单,循环速度足够快。但是,你了解字典解析吗?它跟列表解析一样吗?
字典解析,不同于列表解析。
基本语法
让我们通过两个示例,了解一下字典解析的基本语法。
在第一个示例中,创建一个字典,其值为1-10的整数。
代码语言:javascript复制my_nums = {
i: i
for i in range(1,6)
}
print(my_nums) # {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}
下面,创建类似的字典,但是,增加一个条件,只选择奇数作为字典的值。
代码语言:javascript复制my_nums = {
str(i): i
for i in range(1,6)
if i % 2 == 1
}
print(my_nums) # {'1': 1, '3': 3, '5': 5}
或许看了上面两个示例,还没有什么感觉,但它们的确是演示字典解析语法规则的好例子。
字典解析与列表解析最大的不同在于,字典解析中药有两个值——一个是键,另外一个是值。因此,字典解析,需要你多思考一下,这或许就是它使用频率不高的原因吧。
下面让我们看看真实开发中遇到的情况。
实战中的字典解析
下面的两个示例,是我常用到的。
- 移除缺失值
我喜欢在移除缺失值的时候使用字典解析,最典型的就是移除None
。这里需要使用筛选条件,通常这么做:
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()
方法,它以元组的形式返回字典的键值对。
- 替代
map
函数
我比较喜欢map
函数,但是,字典解析也能够实现同样的功能,并且它没有那么复杂的语法,比如使用Lambda函数之类的。
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