python字典的缩写

python字典的缩写,python,dictionary,dict-comprehension,Python,Dictionary,Dict Comprehension,我尝试了几次搜索,但我真的不知道怎么问。我理解循环的缩写形式,但字典中的这一部分让我感到困惑 resistances = {k: v if random.random() > self.mutProb else not v for k, v in self.resistances.items()} 它是否先将k设置为键,然后再循环使用?我很难想象“长手”是什么。你有一个字典理解,对于for循环的每次迭代,都会执行两个表达式。一个用于键,一个用于值 因此,在表达式中: {k: v

我尝试了几次搜索,但我真的不知道怎么问。我理解循环的缩写形式,但字典中的这一部分让我感到困惑

resistances = {k: v if random.random() > self.mutProb else
    not v for k, v in self.resistances.items()}
它是否先将
k
设置为键,然后再循环使用?我很难想象“长手”是什么。

你有一个字典理解,对于
for
循环的每次迭代,都会执行两个表达式。一个用于键,一个用于值

因此,在表达式中:

{k: v if random.random() > self.mutProb else not v
 for k, v in self.resistances.items()}
k
v if random.random()>self.mutProb else not v
都是表达式,第一个表达式生成键,第二个表达式生成结果字典的每个键值对的值

如果要对循环使用
,则上述操作将实现为:

resistances = {}
for k, v in self.resistances.items():
    key = k
    value = v if random.random() > self.mutProb else not v
    resistances[key] = value
在您的示例中,只需将键设置为变量
k
的值,但您也可以使用更复杂的表达式

词典理解是语言的一种专门化;另一种形式是从键值对的静态列表生成无循环的字典,您可能更熟悉:

d = {key1: value1, key2: value2}
但文件指出:

与列表和集合理解不同,dict理解需要两个用冒号分隔的表达式,后跟通常的“for”和“if”子句。运行理解时,生成的键和值元素将按生成顺序插入新词典


这被称为字典理解,简称dict comp。它遵循列表comp背后的相同概念。向外检查。。。惊人的反应。干杯