遍历词典列表,创建词典的新列表

问题描述:

需要一些帮助我的代码,基本上我有一个包含列表词典:遍历词典列表,创建词典的新列表

例如

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

您将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}}