python - 如何在没有 defaultdict 的情况下返回买卖的股票数量?

标签 python dictionary

对于这个问题,我们得到了这个字典,它的键是名字;它具有具有 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/

相关文章:

python - 我可以将数据框导出到 Excel 作为第一个工作表吗?

python - 如何将字典输出到数据帧,包括 None 类型值

c# - 遍历包含对象的字典

c++ - 为什么我不能用这个结构作为值创建一个 std::map

python - 获取列与某个值匹配的行的索引

python - 在numpy中按行获取范围

python - 在 Python 中提取视频帧

python - 如何在一张图中对齐折线图和条形图的 x 轴?

python - Django CSRF 验证失败。即使使用@csrf_exempt 请求也中止

python - 测试所有字典项是否为 'True' 的快速方法