遍历词典列表,创建词典的新列表
问题描述:
需要一些帮助我的代码,基本上我有一个包含列表词典:遍历词典列表,创建词典的新列表
例如
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}}
]
答
您将Python数据结构很困惑,你不能有钥匙在列表中,你不需要字典的列表,只需一个键。因此,假如你真正想要的是一本字典,其中键的组合,和值为buy
和sell
作为单独的值的总和的字典:
>>> 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}}
你给的代码样本上到处是错别字。它们甚至在语法上都不合法。请在寻求逻辑帮助之前修正基本知识。 – ShadowRanger