如何使用Python中的字典解析

2020-06-05 10:48:58 浏览数 (1)

作者: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}

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

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

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

实战中的字典解析

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

  1. 移除缺失值

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

代码语言:javascript复制
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函数之类的。

代码语言:javascript复制
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

0 人点赞