嵌套字典理解的执行顺序

问题描述

我正在尝试转换此列表:

data = [{'A': 123},{'B': 456},{'C': 789}]

到这本词典:

{'A': 123,'B': 456,'C': 789}

通过使用字典理解:

{key: value for key,value in dictionary.items() for dictionary in data}

异常:

NameError: name 'dictionary' is not defined

解决方法

您需要切换迭代逻辑。 字典(或列表)中的默认迭代顺序理解从左到右:

>>> data = [{'A': 123},{'B': 456},{'C': 789}]

>>> {k: v for d in data for k,v in d.items()}
{'A': 123,'B': 456,'C': 789}

您可以使用 {}[] 和 { 创建嵌套的字典推导列表推导生成器表达式 {1}} 分别是我之前提到的从左到右执行顺序的例外。所有这些操作都会创建新对象,并在它们自己的作用域内执行。