知道有这么玩意,但是隔了一段时间不用,又容易忘记它的语法,又得网上查一遍。
这次就自己用博客好好记下来。

运行环境 Runtime environment

1
2
3
操作系统 : Windows10  
IDE: JetBrains Python 2018.2.4 x64
语言: Pytthon 3.6.5

背景

用一串简短的代码代替冗长判断嵌套,让代码变得更加简洁明了。
同类的还有列表生成器,而字典生成器相对来说用得少了一些。

字典生成式

字典生成式的语法格式:

dictG = {key: value for (key, value) in iterable}

其中iterable为可迭代的对象,比如list、tuple等

尝试使用字典生成式完成字典键值位置对调操作

1
2
old_dict = {'x': 1, 'y': 2, 'z': 3}
new_dict = {v: k for k,v in old_dict.items()}

运行结果:

1
{1: 'x', 2: 'y', 3: 'z'}

尝试使用字典生成式完成list、tuple组成键值对的操作

1
2
3
list_1 = [1,2,3,4,5,6,7]
tuple_2 = ('a','b','c','d','e','f','g')
new_dict = {v: k for k,v in zip(list_1,tuple_2)}

运行结果:

1
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7}

尝试结合if判断来写字典生成式

1
2
old_dict = {'x': 1, 'y': 2, 'z': 3}
new_dict = {k: v if v == 2 else None for k,v in old_dict.items()}

运行结果:

1
{'x': None, 'y': 2, 'z': None}

尝试字典生成式和字典生成式嵌套

1
2
old_dict = {'x': 1, 'y': 2, 'z': 3}
new_dict = {k: v if v == 2 else None for k,v in {v: k if v == 2 else None for k,v in old_dict.items()}.items()}

运行结果:

1
{1: None, 2: None, 3: None}

总结

  1. 字典生成式与列表生成式的用法基本相同
  2. 网上博客把这个称之为字典生成器,我认为称为字典生成式更准确,用来区分生成器
  3. 字典生成式等效于一个字典,是可以进行嵌套的