2012-02-07 83 views
0

我有一个关于this问题的接受答案的问题。python字典,如何转换它

你能解释一下为什么这个代码:

[{'type':k, 'items':v} for k,v in res.items()] 

做的工作,即它结合项目与同一密钥列表英寸

+1

这个问题很差,请澄清。 – Kekoa 2012-02-07 18:52:45

回答

7

你能解释一下[{'type':k, 'items':v} for k,v in res.items()]

让我们把它拆开:

  1. for k,v in res.items()迭代的res项,分别给每个键和价值kv
  2. {'type':k, 'items':v}创建一个双元素字典。第一个元素具有密钥'type'和值k;第二个元素的密钥为'items',值为v
  3. 列表理解[...]的作用是将res中的每个条目转换为字典,如步骤2中所述,并将生成的字典存储在列表中。
3

表达式的括号使其成为list comprehension。基本上,左边部分({'type':k, 'items':v})针对每个项目进行评估,并将结果制成列表。

res.items返回字典中每个条目的键和值的元组。

再说说输入res{'a': 7, 'b': 9}(这是映射的字典a7b9然后,res.items()是:

[('a', 7), ('b', 9)] 

圆括号使一个元组,这基本上是不可变列表。列表理解中的for循环迭代元组元素,并临时将它们分配给kv

# 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} 
0
[{'type':k, 'items':v} for k,v in res.items()] 

这意味着正是它似乎是说:“由(看起来像一本字典:{'type': k, 'items': v})的列表,包含在每个k, vres.items()“。