gpt4 book ai didi

python - 搜索 Python 字典键

转载 作者:行者123 更新时间:2023-11-29 22:55:39 25 4
gpt4 key购买 nike

早在 2000 年,我就开始在 Matlab 中编写“real”代码。当您创建一个数组时,您可以简单快速地搜索该数组的键。事情是这样的:

found_keys = find(my_array(:, 1) > start_time & my_array(:, 1) < end_time)

在此示例中,my_array 是一个数组(实际上是矩阵),第一列是时间戳。返回的结果是大于 start_time 且小于 end_time 的时间戳的列表。然后我可以循环 find_keys 来仅处理 my_array 中相关的数据。

我现在正在Python中处理具有时间戳的数据,并且我正在尝试匹配来自2个不同源的数据,这些数据报告它们在不同时区的时间,但不告诉这些时区是什么。两个来源的数据均由大量(40k 和 10K)单独事件组成。 10K 代表两个来源报告的个别事件。 2 个源共享 3 个具有相同值的字段。

因此,理想情况下,我会从 10k 源中确定单个事件的时间戳。然后,我将创建一个时间窗口 - +/- 12 小时,用于定义搜索的开始时间和结束时间。然后,我将仅搜索 40k 源中时间戳介于 start_time 和 end_time 之间的单个事件。

在 Matlab 中这非常简单,但在 Python 中我必须使用 OrderedDict 来获取从低到高排序的时间戳键。我仍然不知道有什么与 Matlab 的 find 函数等效的东西。因此,我只能为 10k 事件中的每一个事件循环遍历 40k 源。显然,一旦找到匹配项,我就可以跳出循环,甚至可以将值从字典中弹出,但这只会大大加快搜索速度。按照命令,我也可以在时间戳大于 end_time 后退出循环。但这些简单的优化仍然有很多不足之处。

虽然我当前的 40k 和 10k 数据集不是很大,但我不能只进行大量搜索并等待一段时间才能得到结果,我更喜欢更快的方法。

有什么想法吗?

--- 编辑以显示结果:02/25/2015 ---

我偏爱字典理解,因为最终结果是下游代码所需的值的字典。而且时间过得很快,也没什么大不了的。然而,到目前为止,numpy 解决方案是最快的。以下是数字:

  1. Numpy:0.47 毫秒
  2. 包含链式比较的列表:11.30 毫秒
  3. 字典理解:11.82 毫秒

所有 3 个解决方案都提供了相同的答案。对于我的测试,它将 43,977 个单独事件减少到 49 个。如果我只运行几次,任何和所有解决方案都完全足够,但我可以运行此代码数千次,因此 numpy 和其他所有事件之间的区别就变成了重要。

最佳答案

如果您可以使用 numpy 数组而不是 OrderedDict,则语法非常接近 Matlab。

例如,您的示例行变为:

found_keys = numpy.where((my_array[:, 0] > start_time)*(my_array[:, 0] < end_time))[0]

注意,Matlab的&在Python中改为*,但是numpy还包括logical_and这会起到同样的作用。

关于python - 搜索 Python 字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com