在于datesAndPrices以下几点:
{'2019-01-01': 3869.47, '2019-01-02': 3941.2167, '2019-01-03': 3832.155, '2019-01-04': 3863.6267, '2019-01-05': 3835.5983}
我不明白为什么up_periods它们down_periods是空的。
inup_periods应该是这样的:
up_periods = {
'1': [2019-01-01, 2019-01-02],
'2': [2019-01-03, 2019-01-04],
}
down_periods相反,应该有价格下跌的日子。
仅up_periods在价格值高于前一天的那些日子,down_periods降低。
我的代码:
value = 0
up_periods = {}
# down_periods = {}
values = []
keyValues = list(datesAndPrices.keys());
pos = -1;
for j in sorted(datesAndPrices):
pos += 1;
if pos >= len(keyValues):
pos = len(keyValues)-1
if datesAndPrices[j] > value:
value = datesAndPrices[j];
values.append(j)
if datesAndPrices[keyValues[pos]] < value:
up_periods.update({"key": j, "prices": values.copy()})
values.clear()
print (up_periods)
对于初学者, up_periods 不为空,但包含以下值:
这与写的非常一致:“key”键被分配了 datesAndPrice 字典中最后一个键的名称,其值小于该字典中的最大值,“prices”键被分配列出价格高于最大值的最新日期(即从不)
我可以建议这个解决方案:
对于down_periods,分别是相同的东西,只是交换了“>”和“<”。
另外,我可以说,当连续几天的价格相等时,您不会处理这种情况。如果您的情况可能发生这样的事件,我建议将 ">" 替换为 ">=" 或 "<" 替换为 "<="
我可以这样解释您的错误:在编写时
up_periods.update({"key": j, "prices": values.copy()}),您显然假设 j 将成为键的名称,而 values.copy() 将成为它的值,但实际上您创建了两个键:一个名为“key”的键被分配值 j(这里还需要指定你的 j 不是 1、2、3 等,而是 sorted(datesAndPrices) 中的键名,即日期)和名为“prices”的键,其值变为 values.copy()。另外,你的值,也就是前一天的价格值,只有价格高于它才会更新,低于它就不更新,因此,这样,期间是从您那里选择的。