Python:使用列表推导创建字典列表

时间:2010-11-11 20:30:06

标签: python list-comprehension

我有一个词典列表,我想用它来创建另一个词典列表,稍作修改。

这就是我想要做的事情:

entries_expanded[:] = [{entry['id'], myfunction(entry['supplier'])} for entry in entries_expanded]

所以我最终得到了另一个词典列表,只是改变了一个词条。

上面的语法被破坏了。我怎么能做我想做的事?

如果我要扩展代码示例,请告诉我。

3 个答案:

答案 0 :(得分:2)

这不是你想要的吗?

entries_expanded[:] = [
    dict((entry['id'], myfunction(entry['supplier']))) 
    for entry in entries_expanded
]

你可以把它想象成一个创建元组的生成器,然后是一个列表理解,它会产生字典:

entryiter = ((entry['id'], entry['supplier']) for entry in entries_expanded)
tupleiter = ((id, myfunction(supplier)) for id, supplier in entryiter)
entries_expanded[:] = [dict(t) for t in tupleiter]

或者,正如另一个答案所暗示的那样:

entryiter = ((entry['id'], entry['supplier']) for entry in entries_expanded)
tupleiter = ((id, myfunction(supplier)) for id, supplier in entryiter)
entries_expanded[:] = [
    dict((('id', id), ('supplier', supplier))) 
    for id, supplier in tupleiter
]

答案 1 :(得分:1)

要为每个字典创建一个新字典,您需要重新设置密钥:

entries_expanded[:] = [{'id':entry['id'], 'supplier':myfunction(entry['supplier'])} for entry in entries_expanded]

(如果我已经理解你正在尝试做什么,无论如何)

答案 2 :(得分:0)

使用列表理解

    entries_expanded= [{'id':entry['id'], 'supplier':myfunction(entry['supplier'])} for entry in entries_expanded]