使用python itertools将元组列表按相同的元组(时间戳)分组

2024-06-26 12:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个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()-函数。我不明白我需要什么样的键函数才能按相等的“时间戳”分组。你知道吗

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

Tags: 列表datadatetimevalue时间传感器sensortimestamp
1条回答
网友
1楼 · 发布于 2024-06-26 12:39:05

在代码中,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'}]]

相关问题 更多 >