Python 字典语法,有一个 for 条件

Python dictionary syntax, having a for condition

我有这本词典,

states = {
    'CT': 'Connecticut',
    'CA': 'California',
    'NY': 'New York',
    'NJ': 'New Jersey'
    }

并在此处编码..

state2 = {state: abbrev for abbrev, state in states.items()}

我正在尝试了解此 abbrev for abbrev 的工作原理和工作原理。我也不清楚 state: 到底是什么。我得到第二部分(在 states.items() 中说明)。这个输出给出

{'Connecticut': 'CT', 'California': 'CA', 'New York': 'NY', 'New Jersey': 'NJ'}

但我不确定这是如何工作的。提前谢谢你。

这里发生的事情叫做字典理解,一旦你看够了就很容易阅读。

state2 = {state: abbrev for abbrev, state in states.items()}

如果您看一下 state: abbrev,您可以立即看出这是一个常规的对象分配语法。您正在将 abbrev 的值分配给状态键。但是什么是状态和缩写?

你只需要看下一条语句,for abbrev, state in states.items()

这里有一个 for 循环,其中 abbrev 是键,state 是项,因为 states.items() returns 我们是键值对。

所以看起来字典理解正在为我们创建一个对象,通过循环遍历一个对象并在循环时分配键和值。

字典推导与列表推导类似。 states.items() 是一个生成器,它将 return 原始字典中每个项目的键和值。因此,如果您要声明一个空字典,遍历项目,然后翻转键和值,您将拥有一个新字典,它是原始字典的翻转版本。

state2 = {}
for abbrev, state in states.items():
    state2[state] = abbrev

从循环结构转换

翻转行的顺序

state2 = {}
    state2[state] = abbrev
for abbrev, state in states.items():

加长括号包罗万象

state2 = {
    state2[state] = abbrev
for abbrev, state in states.items():
}

修复分配问题,因为 state2 未分配

state2 = {
    state: abbrev
for abbrev, state in states.items():
}

放弃原来的:

state2 = {
    state: abbrev
for abbrev, state in states.items()
}

整理行

state2 = {state: abbrev for abbrev, state in states.items()}

使用理解语法通常更快,也是首选。