首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用来自另一个字典的聚合值创建新字典

如何使用来自另一个字典的聚合值创建新字典
EN

Stack Overflow用户
提问于 2021-10-19 14:35:42
回答 1查看 53关注 0票数 0

我有一本以一天中的时间为重点,以股价为价值的字典。一天中的每一分钟都有一把钥匙:

代码语言:javascript
复制
original_dict = {'09:30': '2170.8601', '09:31': '2180.21', '09:32': '2181.76'... '16:15': '2179.98'}

我正在尝试创建一个新的字典,它将以时间作为键和值,通过滚动10分钟的增量,将包含开放的、高的、低的和关闭的股票价格(原始字典中的值)组成的列表:

代码语言:javascript
复制
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:309:30-9:39的最大值、9:30-9:39的min和original_dict9:39值。9:41键将具有打开的、高的、低的、使用来自original_dict9:31-9:40值计算的关闭值,等等。

我不知道如何轻松地执行for语句,例如,使用original_dict,因为它不是一个列表。我是否应该从original_dict创建一个中间键列表,并使用它来遍历时间?

创建new_dict的最佳方法是什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-19 15:21:42

这需要相当多的编码,所以我将写一些步骤来帮助您完成任务。

  1. 将字符串键('09: 30 ')转换为数字(‘09:30’是9*60 +30=21时30分)。
  2. 从字典中的最早一分钟到最后一分钟进行迭代,并将与每分钟相关的值存储在列表中。现在您应该有一个按时间顺序排序的值列表。
  3. 维护一个滑动窗口最大队列和滑动窗口最小队列,在您的情况下窗口大小为10。
  4. 然后,在每一步,从滑动窗口最大队列中获取“高价格”,同样地,获取“低价格”。对于“开始价格”,您只需回顾我们前面形成的值排序列表中的10个索引。对于“最终价格”,我们只关注一个单一的指数。

应该是这样的。这里最棘手的部分可能是实现滑动窗口最大值/最小值,您可以获取一个函数的后续执行情况,该函数接受一个数字列表,并返回列表中大小为k的每个连续窗口的最大值的另一个列表。以O(N)时间运行,其中N是列表的大小。

代码语言:javascript
复制
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:]

同样,您也可以获得滑动窗口的最小值,并且您应该有足够的希望使其正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69632831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档