Python3 字典推导(Dict Comprehensions)

译者:anxin
日期:2018-06-22

Python3 字典推导(Dict Comprehensions)就是从一个已有的序列(包括列表(List)集合(Set)元组(Tuple))构造一个新的字典,字典推导构造新字典的过程是:遍历已有序列中的每一个元素,如果元素满足特定的条件,则把此元素按照键值对表达式计算后添加到新字典中,直到遍历结束。

Python3 字典推导语法形式

字典推导包含以下几部分:

  • for 循环语句,用于遍历已有序列中的元素
  • 可选的嵌套 for 循环语句,用于遍历另一个已有的序列中的元素
  • 可选的条件语句,用于判断已有序列中的元素是否满足一定条件
  • 键值对输出表达式,用于对已有序列中满足条件的元素,按照键值对表达式进行计算,把结果添加到新字典中(这是与列表推导不同的地方

根据字典推导需要包含的几个部分,字典推导有四种形式:

  • 最简单的形式,只包含键值对输出表达式和 for 循环语句的字典推导
  • 包含条件语句的字典推导
  • 包含嵌套 for 循环语句的字典推导
  • 包含嵌套 for 循环语句和 if 条件语句的字典推导

注:在 for 循环中可以是任何可以遍历的对象(列表(List)集合(Set)元组(Tuple),字典的关键字列表,等)

Python3 四种字典推导形式详细解释

1)最简单的字典推导形式,只包含键值对输出表达式和 for 循环语句,形式如下:

Python 3 字典推导简单形式

此种字典推导的简单实例如下:

#!/usr/bin/env python3

lst_1 = [1, 2, 3]
dic = {str(e): e for e in lst_1}
print(dic)

输出的结果是:

{'1': 1, '2': 2, '3': 3}

此种形式的字典推导构造新字典的过程是:遍历已有列表中的每一个元素,把元素转换为字符串后作为字典元素的键,把元素值作为字典元素的值,形成一个字典元素(键值对)添加到新字典中,直到已有列表遍历结束。

2)包含条件语句的字典推导,形式如下:

Python 3 字典推导包含 if 语句

此种字典推导的简单实例如下(lst_1 中包含了一个字符串元素):

#!/usr/bin/env python3

lst_1 = [1, 2, 3, 'a']
dic = {str(e): e for e in lst_1 if type(e) is int}
print(type(dic))
print(dic)

输出的结果是:

<class 'dict'>
{'1': 1, '2': 2, '3': 3}

此种形式的字典推导构造新字典的过程是:遍历已有列表中的每一个元素,如果元素是整数类型,把元素转换为字符串后作为字典元素的键,把元素值作为字典元素的值,形成一个字典元素(键值对)添加到新字典中,直到已有列表遍历结束。

3)包含嵌套 for 循环语句的字典推导,形式如下:

Python 3 字典推导包含嵌套 for 语句

此种字典推导的简单实例如下:

#!/usr/bin/env python3

lst_1 = [1, 2, 3]
lst_2 = [4, 5]
dic = {str(e)+str(i): e*i for e in lst_1 for i in lst_2}
print(type(dic))
print(dic)

输出的结果是:

<class 'dict'>
{'25': 10, '15': 5, '34': 12, '14': 4, '35': 15, '24': 8}

此种形式的字典推导构造新字典的过程是:遍历 lst_1 列表中的每一个元素,在遍历 lst_1 中一个元素时,遍历一遍 lst_2 中的所有元素,在遍历 lst_2 中每一个元素时,把当前遍历的 lst_1lst_2 中的元素转换为字符串后相连接作为字典元素的键,把当前遍历的 lst_1lst_2 中的元素相乘作为字典元素的值,形成一个字典元素(键值对)添加到新字典中,直到两个列表遍历结束。

4)包含嵌套 for 循环语句和 if 条件语句的字典推导,形式如下:

Python 3 字典推导包含嵌套 for 和 if 语句

此种字典推导的简单实例如下:

#!/usr/bin/env python3

lst_1 = [1, 2, 3, 'a']
lst_2 = [4, 5]
dic = {str(e)+str(i): e*i for e in lst_1 for i in lst_2 if type(e) is int}
print(type(dic))
print(dic)

输出的结果是:

<class 'dict'>
{'25': 10, '15': 5, '34': 12, '14': 4, '35': 15, '24': 8}

此种形式的字典推导构造新字典的过程是:遍历 lst_1 列表中的每一个元素,在遍历 lst_1 中一个元素时,遍历一遍 lst_2 中的所有元素,在遍历 lst_2 中每一个元素时,如果当前遍历的 lst_1 中的元素是整数,把当前遍历的 lst_1lst_2 中的元素转换为字符串后相连接作为字典元素的键,把当前遍历的 lst_1lst_2 中的元素相乘作为字典元素的值,形成一个字典元素(键值对)添加到新字典中,直到两个列表遍历结束。

本文链接:/tutorial/python3/python3-zidian-tuidao-comprehensions

本文版权归知站所有,未经站长同意不得转载,谢谢尊重作者劳动成果!