对于这个问题,我们得到了这个字典,它的键是名字;它具有具有 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
我正尝试通过为每个股份公司分别列出列表来为每个股份公司单独执行此操作,但我觉得这很乏味。我不确定还有什么其他技术可以单独为每个股份公司执行此操作。
有没有一种简单易懂的方法来做到这一点,最好不用 defaultdict
?
谢谢!
最佳答案
这应该适合你(尽管肯定有更紧凑的方法):
stock_dict = {}
for user_list in new_dict.values():
for stock_tuple in user_list:
stock_name = stock_tuple[0]
if (not (stock_name in stock_dict.keys())):
stock_dict[stock_name] = list(stock_tuple[1:])
else:
stock_dict[stock_name][0] += stock_tuple[1]
stock_dict[stock_name][1] -= stock_tuple[2]
- 您也可以压缩和求和,但不太直观。
基本上您所做的是为特定键创建一个值(如果它不存在 - 这部分只是必要的,因为您不想使用默认字典),如果它确实存在,您添加相关值。
关于python - 如何在没有 defaultdict 的情况下返回买卖的股票数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970678/