2011-04-29 67 views
8

嗨,我很新的Python,所以我沒有真正意識到所有的小技巧和快捷方式。我有兩個多維數組:Pythonic的方式來合併兩個元組列表到單個字典的列表

>>> colorStrings 
[('0', '2371_9890_020'), ('1', '2371_9031_100'), ('2', '2371_9890_464')] 

>>> skus 
[('0', '0017651670'), ('0', '0017651688'), ('0', '0017651696'), ('0', '0017651704'), ('0', '0017651712'), ('0', '0017651720'), ('0', '0017651738'), ('1', '0017650896'), ('1', '0017650904'), ('1', '0017650912'), ('1', '0017650920'), ('1', '0017650938'), ('1', '0017650946'), ('1', '0017650953'), ('2', '0017651746'), ('2', '0017651753'), ('2', '0017651761'), ('2', '0017651779'), ('2', '0017651787'), ('2', '0017651795'), ('2', '0017651803')] 

基本上,我希望將這些合併到詞典對象的數組。喜歡的東西:

[ 
{ 
    'colorString': '2371_9890_020' 
    'skus': ('0017651670', '0017651688', '0017651696', '0017651704', '0017651712', '0017651720, '0017651738') 
}, 

{ 
    'colorString': '2371_9031_100' 
    'skus': ('0017650896', '0017650904', '0017650912', '0017650920', '0017650938', '0017650946, '0017650953') 
}, 

{ 
    'colorString': '2371_9890_464' 
    'skus': ('0017651746', '0017651753', '0017651761', '0017651779', '0017651787', '0017651795, '0017651803') 
} 
] 

是否有這樣做真的很容易使用蘭巴表達式或部分實用功能的一些KEWL Python的方式?謝謝!

+0

這是一個「加入」。 – 2011-04-29 06:45:35

+0

從模塊itertools groupby也可以幫助! – shahjapan 2011-04-29 07:05:36

+0

偉大的問題:-) – 2014-10-24 17:08:07

回答

10

試試這個:

result = [ 
    { 
     'colorString' : color, 
     'skus' : [value for key, value in skus if key is colorkey] 
    } for colorkey, color in colorStrings 
] 
+0

哦,現在很酷..我喜歡這個很多.. – 2011-04-29 06:58:03

+0

決定將此標記爲答案,因爲我喜歡它..雖然defauldict()方法也很好地工作.. – 2011-04-29 07:02:46

+0

這可能是相當低效,因爲它必須在colorStrings中的每個條目上每次迭代'colorKey' – Imran 2011-04-29 07:03:12

9

使用defaultdict到組由sku_id的單品,再使用列表理解來生成組合數據集

from collections import defaultdict 

sku_dict = defaultdict(list) 
for color_id, sku in skus: 
    sku_dict[color_id].append(sku) 

combined = [dict(colorString=color, skus=sku_dict.get(color_id)) for color_id, color in colorStrings] 
+1

那麼,這是完美的作品 - 現在弄清楚爲什麼它的工作原理:) – 2011-04-29 06:52:54

-2
dict(d1, **d2) 

請參閱此相關的問題How do I merge dicts together

+0

-1:不會做任何OP想要的 – Imran 2011-04-29 06:56:01

+0

既不是你的代碼片段,也不是鏈接的問題解決OPs問題。 – 2011-04-29 06:57:01

+0

是啊,加上我不明白,我開始像前一天學習Python .. – 2011-04-29 06:58:41

相關問題