我如何单独/单独退回为每家公司买卖的股票?

时间:2018-04-22 07:12:20

标签: python python-3.x

对于这个问题,我们得到这个字典,其键是名称;其中包含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

我试图通过为每家股份公司单独列出单独为每家股份公司做这件事,但我觉得这只是单调乏味。我不确定每个股份公司还有哪些其他技术可以做到这一点。

谢谢!

1 个答案:

答案 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]}