我有一本以一天中的时间为重点,以股价为价值的字典。一天中的每一分钟都有一把钥匙:
original_dict = {'09:30': '2170.8601', '09:31': '2180.21', '09:32': '2181.76'... '16:15': '2179.98'}我正在尝试创建一个新的字典,它将以时间作为键和值,通过滚动10分钟的增量,将包含开放的、高的、低的和关闭的股票价格(原始字典中的值)组成的列表:
new_dict = {'09:40': [open, high, low, close], '09:41': [open, high, low, close]...}(new_dict从9:40开始,因为计算第一个键/列表需要10分钟)
例如,new_dict中9:40键的值列表应该使用original_dict中的9:30-9:39的值来计算。开放值、高值值、低值值和闭合值分别是9:30、9:30-9:39的最大值、9:30-9:39的min和original_dict的9:39值。9:41键将具有打开的、高的、低的、使用来自original_dict的9:31-9:40值计算的关闭值,等等。
我不知道如何轻松地执行for语句,例如,使用original_dict,因为它不是一个列表。我是否应该从original_dict创建一个中间键列表,并使用它来遍历时间?
创建new_dict的最佳方法是什么?
谢谢!
发布于 2021-10-19 15:21:42
这需要相当多的编码,所以我将写一些步骤来帮助您完成任务。
应该是这样的。这里最棘手的部分可能是实现滑动窗口最大值/最小值,您可以获取一个函数的后续执行情况,该函数接受一个数字列表,并返回列表中大小为k的每个连续窗口的最大值的另一个列表。以O(N)时间运行,其中N是列表的大小。
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
deque = collections.deque()
res = []
for i, num in enumerate(nums):
while(deque and nums[deque[-1]] < num):
deque.pop()
if(deque and i - deque[0] >= k):
deque.popleft()
deque.append(i)
res.append(nums[deque[0]])
return res[k-1:]同样,您也可以获得滑动窗口的最小值,并且您应该有足够的希望使其正常工作。
https://stackoverflow.com/questions/69632831
复制相似问题