2016-03-03 173 views
-3

需要一些幫助我的代碼,基本上我有一個包含列表詞典:遍歷詞典列表,創建詞典的新列表

例如

my_list = [ 
{'trans' : 50,'portfolio' : ABC}, 
{'trans' : 30,'portfolio' : XYZ}, 
{'trans' : 20, 'portfolio : ABC}, 
{'trans' : -40, 'portfolio : XYZ} 
] 

我想通過這個列表循環的字典,創建一個新的字典清單,其中的關鍵是'投資組合'和價值是一個字典,是根據條件更新。例如,新的名單是這樣的:

new_list = [ 
{ABC : [BUY : 70, SELL : 0]}, 
{XYZ : [BUY : 30 , SELL : -40]} 
] 

***請注意,ABC值 - > [求購]是我的「移植」> 0,如果沒有賣出一套的總和爲0,XYZ - >買入是30的總和只是本身,現在已填充賣出

這裏是我到目前爲止,我知道錯了,但失去了就沒怎麼把它改寫

from collections import defaultdict 

buy = 0 
sell = 0 
new_dict = defaultdict(lamba: {'BUY' :0,'SELL' : 0}) 
    for row in my_list: 
     if row['tran'] > 0: 
      buy += row['tran'] 
      update = {'BUY': buy} 
     else: 
      sell += row['tran'] 
      update = {'SELL' : sell} 
     new_dict[row['portfolio']] = update   

正如你可以看到,無論「投資組合」如何,我都會繼續增加買入/賣出,但是我希望他們僅在我的新字典中增加投資組合(關鍵字)關於'tran'的if/else邏輯。從上面的邏輯,我的業績低於,這是不正確

new_list = [ 
    {ABC : {BUY : 100, SELL : 0}}, 
    {XYZ : {BUY : 100, SELL : -40}} 
    ] 
+1

你給的代碼樣本上到處是錯別字。它們甚至在語法上都不合法。請在尋求邏輯幫助之前修正基本知識。 – ShadowRanger

回答

2

您將Python數據結構很困惑,你不能有鑰匙在列表中,你不需要字典的列表,只需一個鍵。因此,假如你真正想要的是一本字典,其中鍵的組合,和值爲buysell作爲單獨的值的總和的字典:

>>> results = {} 
>>> for t in my_list: 
...  trans = 'BUY' if t['trans'] > 0 else 'SELL' 
...  a = results.setdefault(t['portfolio'], {'BUY':0, 'SELL':0}) 
...  a[trans] += t['trans'] 
>>> results 
{'ABC': {'BUY': 0, 'SELL': 0}, 'XYZ': {'BUY': 0, 'SELL': 0}}