gpt4 book ai didi

python - 使用 python itertools 按相同的元组(时间戳)对元组列表进行分组

转载 作者:行者123 更新时间:2023-11-28 23:30:09 25 4
gpt4 key购买 nike

作为 SQL 查询的结果,我得到了以下未规范化的元组列表。

data = [(...) {u'timestamp': datetime.datetime(2016, 5, 25, 23, 55, 33), u'sensor': u'GP_PRES', u'value': u'96587'}, {u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_NO2', u'value': u'0.221'}, {u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_TC', u'value': u'14.600'}, {u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_HUM', u'value': u'83.94'}, (...) ]

这些是来自多个传感器但具有相同时间戳的传感器数据。

我想用相同的时间戳对所有传感器值进行分组。这样我就有了每个相等时间戳的元组列表。

grouped_data = [... {u'timestamp': datetime.datetime(2016, 5, 25, 23, 55, 33), [{u'sensor': u'GP_PRES', u'value': u'96587'}, { u'sensor': u'GP_NO2', u'value': u'0.221'}, {u'sensor': u'GP_TC', u'value': u'14.600'}, {u'sensor': u'GP_HUM', u'value': u'83.94'}]}, ... ]

我知道我可以使用 itertools 中的 groupby() 函数。我不明白我需要什么样的 Key 函数才能按相等的“时间戳”进行分组。

data2 = sorted(data, key= operator.attrgetter('timestamp'))
for k, g in groupby(data2, keyfunc):
groups.append(list(g))

最佳答案

在您的代码中,operator.attrgetter('timestamp') 引发错误 AttributeError: 'dict' object has no attribute 'timestamp'

替换为key=lambda d:d['timestamp'],如下图。

#!/usr/bin/env python 
# -*- coding: utf-8 -*-

import itertools
import operator
import datetime

data = [{u'timestamp': datetime.datetime(2016, 5, 25, 23, 55, 33), u'sensor': u'GP_PRES', u'value': u'96587'},
{u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_NO2', u'value': u'0.221'},
{u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_TC', u'value': u'14.600'},
{u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_HUM', u'value': u'83.94'}]

groups = list()
data2 = sorted(data, key=lambda d:d['timestamp'])
for k, g in itertools.groupby(data2, key=lambda d:d['timestamp']):
groups.append(list(g))

print(groups) # 2 groups
[[ {u'timestamp': datetime.datetime(2016, 5, 25, 23, 55, 33), u'sensor': u'GP_PRES', u'value': u'96587'}],
[ {u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_NO2', u'value': u'0.221'},
{u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_TC', u'value': u'14.600'},
{u'timestamp': datetime.datetime(2016, 5, 25, 23, 56, 33), u'sensor': u'GP_HUM', u'value': u'83.94'}]]

关于python - 使用 python itertools 按相同的元组(时间戳)对元组列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37622831/

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