使用带for循环的字典比较值

时间:2019-04-14 16:17:42

标签: python python-3.x list dictionary

我目前正在从事一项作业,我们正在读取包含份额的文件,这些份额带有日期和份额值。在作业中,我们应该在所有函数中都将字典用作参数。

这是分享输入的一个小例子;

2000-01-26,3.67987

2000-01-27,3.673608

2000-01-28,3.393913

目标是找到两个日期分别通过买卖股票获得最大的利润,而两个日期分别通过买卖授予给您最大的损失。我制作了一个包含日期和共享值对的字典,现在只需要将它们相互比较即可。字典的排序如下:{share value:date}

目前,我已经设法通过将所有份额值都放在列表中来解决此问题,因为索引可以索引,因此我可以更轻松地将它们相互比较。然后,我再次使用该位置查找共享值,然后使用它在字典中查找相应键的值。

但是,这种解决方案不能正确地将字典用作参数,因此我相信它不会满足我的教授的要求。

def calc_max_profit():
   value = 0
   profit = 0
   max_profit = 0
   for x in range(0, len(share_list)):
       value = share_list[x]

       for y in range(x+1, len(share_list)):
           profit = share_list[y] - value

           if profit > max_profit:
               max_profit = profit

这基本上是我计算最大利润的方式,在if语句中,我只需要保存最后一次出现的“ max_proft =利润”的头寸,但是在这里我不会这样做。

那么有什么方法可以只使用字典来做类似的事情吗?

1 个答案:

答案 0 :(得分:1)

这有点棘手,但是我希望这可以解决您的问题。请注意,您必须确保购买日期的时间顺序合理。所提供的代码建立了一个新的差异字典(keys=diffs & vals=sell_date-buy_date),然后您只找到最大利润的最大值和最大损失的最小值。

from datetime import datetime as dt

shares = {150:'2000-01-01', 10:'2000-07-01', 120:'2000-05-01', 200:'2000-09-01', 50:'2000-08-01'}
diff_values = [i-j for i in shares.keys() for j in shares.keys() 
               if dt.strptime(shares[j], "%Y-%m-%d") <  dt.strptime(shares[i], "%Y-%m-%d") ]

diff_dates  = [[shares[j], shares[i]] for i in shares.keys() for j in shares.keys()
               if dt.strptime(shares[j], "%Y-%m-%d") <  dt.strptime(shares[i], "%Y-%m-%d")]
diffs_dict  = dict(zip(diff_values, diff_dates))

max_diff = max(diffs_dict.keys())
min_diff = min(diffs_dict.keys())