我对this问题的已接受答案有疑问。
你能解释为什么这段代码:
[{'type':k, 'items':v} for k,v in res.items()]
完成这项工作,即它将要列出的项目组合在同一个键中。
答案 0 :(得分:7)
你能解释
吗?[{'type':k, 'items':v} for k,v in res.items()]
让我们把它拆开:
for k,v in res.items()
遍历res
的条目,分别将每个键和值分配给k
和v
。{'type':k, 'items':v}
创建一个双元素字典。第一个元素包含键'type'
和值k
;第二个元素包含键'items'
和值v
。[...]
的效果是res
中的每个条目都会转换为字典,如步骤2中所述,并且生成的字典存储在列表中。答案 1 :(得分:3)
表达式周围的括号使其成为list comprehension。基本上,对每个项目评估左侧部分({'type':k, 'items':v}
),并将结果作为列表。
res.items
返回字典中每个条目的键和值的元组。
说输入res
是{'a': 7, 'b': 9}
(这是一个将a
映射到7
和b
到9
的词典然后,res.items()
是:
[('a', 7), ('b', 9)]
圆括号构成一个元组,这基本上是一个不可变的列表。列表推导中的for循环遍历元组的元素,并暂时将它们分配给k
和v
:
# First iteration
k = 'a'
v = 7
=> Add {'type': 'a', 'items': 7} to the result
# First iteration
k = 'b'
v = 9
=> Add {'type': 'b', 'items': 9} to the result
现在,结果是列表
[{'type': 'a', 'items': 7}, {'type': 'b', 'items': 9}
答案 2 :(得分:0)
[{'type':k, 'items':v} for k,v in res.items()]
这意味着它的确含义:“{'type': k, 'items': v}
中包含的每个k, v
对包含的字典(res.items()
}的字典}。