2011-03-15 32 views
0

什麼是此代碼的更「pythonic」版本? (在Python 2.X)'defaultdict`的Pythonic更新

from collections import defaultdict 
dd = defaultdict(list) 
for i in some_list_of_items: 
    current_dict = dict_from_an_item(i) 
    for (k, v) in current_dict.items(): 
     dd[k].extend(v) 

dict_from_an_item解析的項目,並返回包含不嵌套列表作爲值的字典。類似這樣的:

{ 'key1': [1, 2, 3], 
    'key2': [2, 3, 4], 
    'key3': [3, 4, 5, 6, 7, 8]} 
+0

是什麼'dict_from_an_item'嗎? – 2011-03-15 12:27:37

+0

字典結構有多深?對於current_dict.values()中的(k,v):「真的是你想要的嗎?鍵/值對用'.items()'而不是'.values()'返回。 – eumiro 2011-03-15 12:41:42

+5

「代碼高爾夫」和「pythonic方式」經常是排他性的限制,是不是。代碼高爾夫的結果是源代碼不可讀,這絕對不是Python原則。 – 2011-03-15 12:41:47

回答

3

你可以不用current_dict變量。此外k, v(k, v)

from collections import defaultdict 

dd = defaultdict(list) 
for i in some_list_of_items: 
    for k, v in dict_from_an_item(i).iteritems(): 
     dd[k].extend(v) 
0

更Python如果你不需要因爲性能原因,你可以做一個defaultdict

d = {k:v for i in some_list_of_items for k, v in dict_from_an_item(i).iteritems()}