对于这个问题,我们得到这个字典,其键是名称;其中包含3个值的元组:在3元组中,股票名称,交易的股票数量(int)和每股的价格(int)。
new_dict = {
'Carl': [('Intel', 30, 40), ('Dell' , 20, 50), ('Intel',-10, 60),
('Apple', 20, 55)],
'Barb': [('Intel', 20, 40), ('Intel',-10, 45), ('IBM', 40, 30),
('Intel',-10, 35)],
'Alan': [('Intel', 20, 10), ('Dell', 10, 50), ('Apple', 80, 80), ('Dell',
-10, 55)],
'Dawn': [('Apple', 40, 80), ('Apple' ,40, 85), ('Apple',-40, 90)]
}
我正在创建一个交易函数,它接受new_dict并返回一个字典,其中键是所有在交易中出现的股票;该值是一个股票是2个列表,其中第一个指数是该股票的购买股票数量,其第二个指数是该股票的销售股票数量。 买入是正股票,卖出是任何负数的股票。
此功能的输出应为:
{'Intel': [70, 30], 'Dell': [30, 10], 'Apple': [180, 40], 'IBM': [40, 0]}
这是我到目前为止所做的:
def traded(database :{str: (str, int, int)}) ->dict:
result_dict = dict()
intel = []
dell = []
apple = []
ibm = []
for key, val in database.items():
pos_sum = 0
for x in val:
if x[1] > 0:
pos_sum += x[1]
return pos_sum
我试图通过为每家股份公司单独列出单独为每家股份公司做这件事,但我觉得这只是单调乏味。我不确定每个股份公司还有哪些其他技术可以做到这一点。
谢谢!
答案 0 :(得分:1)
您可以尝试以下实现,使用defaultdict
来存储结果,使用chain.from_iterable
来迭代dict中的值。 defaultdict允许我们为尚不存在的键创建初始值,在这种情况下,初始值是包含0的2元素列表。
from collections import defaultdict
from itertools import chain
def traded(database):
dd = defaultdict(lambda: [0, 0])
for stock_name, quantity, _ in chain.from_iterable(database.values()):
dd[stock_name][quantity < 0] += abs(quantity)
return dict(dd)
print(traded(new_dict))
打印:
{'Apple': [180, 40], 'Dell': [30, 10], 'IBM': [40, 0], 'Intel': [70, 30]}