2010-11-11 74 views
0

我有一個詞典列表,我想用它來創建另一個詞典列表,稍作修改。Python:使用列表理解創建詞典列表

這就是我想做的事:

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

所以我結束了字典的另一個列表,只需用一個條目改變。

上述語法已損壞。我該怎麼做我想要的?

請讓我知道我是否應該展開代碼示例。

+0

你正在使用哪個版本的Python? – 2010-11-11 20:31:42

+0

你能提供一個輸入數據樣本以及你期望輸出的樣子嗎? – 2010-11-11 20:33:06

回答

1

要爲每個字典創建一個新的字典,您需要重新鍵:

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

(如果我已經理解你正在嘗試做的是正確的,無論如何)

+0

是的。謝謝! – AP257 2010-11-12 10:18:55

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 
]