python - 在 Python 中按这些值搜索时,如何有效地从字典中提取值列表?
问题描述
我有一个很大的日志文件,在解析成字典后,它采用以下形式:
data = {id: {"datetime": datetime, "string": string}}
在哪里:
datetime: str
string: str
id: int
(带有嵌套字典的字典)例如:
data = {
0: {"datetime": "03.04.2019", "string":"abc"},
1: {"datetime": "04.04.2019", "string":"abc"},
2: {"datetime": "05.04.2019", "string":"abc"},
3: {"datetime": "05.04.2019", "string":"xyz"},
4: {"datetime": "06.04.2019", "string":"abc"},
5: {"datetime": "06.04.2019", "string":"xyz"},
6: {"datetime": "07.04.2019", "string":"abc"}
}
如您所见,每个嵌套字典中的日期时间和字符串都不是唯一的。但是,对于每个后续 id,后续日期时间都大于或等于之前的日期时间。
我想创建一个函数,它只提取特定日期时间之间的内部字典。例如我的功能:
def extract(start_datetime, end_datetime, data)
...
对于参数:
extract("05.04.2019", "06.04.2019", data)
应该返回:
{
2: {"datetime": "05.04.2019", "string":"abc"},
3: {"datetime": "05.04.2019", "string":"xyz"},
4: {"datetime": "06.04.2019", "string":"abc"},
5: {"datetime": "06.04.2019", "string":"xyz"}
}
我正在考虑为自己实现一个二进制搜索函数,该函数将遍历内部日期时间值并仅提取与搜索条件匹配的内部字典,但是我是一个懒惰的程序员,我正在寻找一个更 Pythonic 的解决方案。因为这是一个大数据集,效率很重要,所以函数要尽可能快。
解决方案
一种衬里
import time
data = {
0: {"datetime": "03.04.2019", "string": "abc"},
1: {"datetime": "04.04.2019", "string": "abc"},
2: {"datetime": "05.04.2019", "string": "abc"},
3: {"datetime": "05.04.2019", "string": "xyz"},
4: {"datetime": "06.04.2019", "string": "abc"},
5: {"datetime": "06.04.2019", "string": "xyz"},
6: {"datetime": "07.04.2019", "string": "abc"}
}
data_in_time_range = [entry for entry in data.values() if
time.strftime(entry['datetime']) >= time.strftime('05.04.2019') and time.strftime(
entry['datetime']) <= time.strftime('06.04.2019')]
print(data_in_time_range)
输出:
[{'datetime': '05.04.2019', 'string': 'abc'}, {'datetime': '05.04.2019', 'string': 'xyz'}, {'datetime': '06.04.2019', 'string': 'abc'}, {'datetime': '06.04.2019', 'string': 'xyz'}]
推荐阅读
- reactjs - onChange 在哪里将参数传递给它的处理程序
- php - 从该包中确定 Composer 包的当前安装版本
- c# - 通过 CreateFileA OPEN_EXISTING 参数更改属性后的 MS Access 安全警告
- python-3.x - 用漂亮的汤从 div 标签中刮取 href
- swift - Codable 和 CodingKeys
- django - 在 ListView 中使用两个模型
- python-3.x - 使用 Map() 时代码不打印集合
- unity3d - 物体撞击触发对撞机的接触点
- python - Django 在迁移期间无法导入本地模块
- python - 如何让程序不使用第一个选项