这个Python表达式包含花括号和for循环,是什么意思?

15

我刚刚发现了这一行python代码:

order.messages = {c.Code:[] for c in child_orders}

除了循环遍历列表child_orders并将结果放置在order.messages中以外,我不知道它在做什么。

它是什么,叫什么?

3个回答

29

这是一个字典推导式

它就像是一个列表推导式

 [3*x for x in range(5)]
 --> [0,3,6,9,12]

除了:

{x:(3*x) for x in range(5)}
---> { 0:0, 1:3, 2:6, 3:9, 4:12 }
  • 生成的是一个Python 字典,而不是一个列表
  • 使用花括号 {} 而不是方括号 []
  • 基于对列表的迭代定义了 键:值

在您的情况下,键来自每个元素的Code属性,而值始终设置为空数组[]

您发布的代码:

order.messages = {c.Code:[] for c in child_orders}

等价于这段代码:

order.messages = {}
for c in child_orders:
    order.messages[c.Code] = []

另请参见:


12

这是字典推导式!

它遍历 child_orders 并创建一个字典,其中键为 c.Code,值为 []

更多信息请看这里


2
就像Python中的列表推导一样,这被称为字典推导。
sample_list = [2,4,6,8,9,10]
dict = {val: val**2 for val in sample_list if val**2 % 2 == 0}
print(dict)
//Output: {8: 64, 2: 4, 4: 16, 10: 100, 6: 36}

上面的代码片段将数字映射到它们的平方,这些平方是偶数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接