【问题标题】:Sort and keep count of data in python在python中对数据进行排序和计数
【发布时间】:2020-09-05 05:18:09
【问题描述】:

我的数据列表是这样的,其中我将时间戳转换为小时、分钟和秒以及在此期间发生的异常。数据已经采用sorted 方式,因此只有在时间(小时、分钟和秒)相同但异常名称不同时才会更改顺序。

在这种情况下,数据将按字母顺序排序。 (仅限特定时间)

预期输出:

21:15-21:30 IllegalAgrumentsException 1,
21:15-21:30 NullPointerException 2,
22:00-22:15 UserNotFoundException 1,
22:15-22:30 NullPointerException 1,
22:30-22:45 UserNotFoundException 3,
22:45-23:00 UserNotFoundException 1,
23:00-23:15 NullPointerException 1,
23:15-23:30 UserNotFoundException 1,
23:30-23:45 NullPointerException 2,
23:45-00:00 IllegalAgrumentsException 1,
00:00-00:15 UserNotFoundException 1,
00:30-00:45 NullPointerException 1,
00:45-01:00 UserNotFoundException 1,
01:00-01:15 IllegalAgrumentsException 1,
01:15-01:30 UserNotFoundException 1,
01:30-01:45 NullPointerException 1,
01:45-02:00 IllegalAgrumentsException 1,
02:00-02:15 IllegalAgrumentsException 1,
02:15-02:30 UserNotFoundException 1,
02:30-02:45 NullPointerException 1,
03:00-03:15 IllegalAgrumentsException 1

数据以下列方式。

data = 
   {'second': 12, 'data': 'NullPointerException', 'hour': 21, 'minute': 27}
   {'second': 12, 'data': 'NullPointerException', 'hour': 21, 'minute': 27}
   {'second': 12, 'data': 'IllegalAgrumentsException', 'hour': 21, 'minute': 27}
   {'second': 32, 'data': 'UserNotFoundException', 'hour': 22, 'minute': 0}
   {'second': 12, 'data': 'NullPointerException', 'hour': 22, 'minute': 17}
   {'second': 52, 'data': 'UserNotFoundException', 'hour': 22, 'minute': 33}
   {'second': 52, 'data': 'UserNotFoundException', 'hour': 22, 'minute': 33}
   {'second': 52, 'data': 'UserNotFoundException', 'hour': 22, 'minute': 33}
   {'second': 32, 'data': 'UserNotFoundException', 'hour': 22, 'minute': 50}
   {'second': 12, 'data': 'NullPointerException', 'hour': 23, 'minute': 7}
   {'second': 52, 'data': 'UserNotFoundException', 'hour': 23, 'minute': 23}
   {'second': 32, 'data': 'NullPointerException', 'hour': 23, 'minute': 40}
   {'second': 32, 'data': 'NullPointerException', 'hour': 23, 'minute': 40}
   {'second': 12, 'data': 'IllegalAgrumentsException', 'hour': 23, 'minute': 57}
   {'second': 52, 'data': 'UserNotFoundException', 'hour': 0, 'minute': 13}
   {'second': 32, 'data': 'NullPointerException', 'hour': 0, 'minute': 30}
   {'second': 12, 'data': 'UserNotFoundException', 'hour': 0, 'minute': 47}
   {'second': 52, 'data': 'IllegalAgrumentsException', 'hour': 1, 'minute': 3}
   {'second': 32, 'data': 'UserNotFoundException', 'hour': 1, 'minute': 20}
   {'second': 12, 'data': 'NullPointerException', 'hour': 1, 'minute': 37}
   {'second': 52, 'data': 'IllegalAgrumentsException', 'hour': 1, 'minute': 53}
   {'second': 32, 'data': 'IllegalAgrumentsException', 'hour': 2, 'minute': 10}
   {'second': 12, 'data': 'UserNotFoundException', 'hour': 2, 'minute': 27}
   {'second': 52, 'data': 'NullPointerException', 'hour': 2, 'minute': 43}
   {'second': 32, 'data': 'IllegalAgrumentsException', 'hour': 3, 'minute': 0}

我已经将数据格式化为 15 分钟的范围,但我无法对数据进行排序。而且我还需要保留当时异常数据的计数。

我已尝试迭代数据,但如果异常名称未按字母顺序排列,我无法交换数据。如何做到这一点?

【问题讨论】:

  • 可以理解21:15-21:30是什么意思,如果它表示开始时间和结束时间,那么您的数据就会丢失一些东西
  • 这就是我们需要在 15 分钟时间范围内格式化数据的方式,这将在数据排序后完成,并且我们得到了 @AdamSherif 的计数。我已经完成了那部分。如果您愿意,我可以在此处发布该代码

标签: python python-3.x list dictionary hashmap


【解决方案1】:

假设数据集是按时间排序的,您可以使用以下函数进行区间和数据聚合:

import time    
Data= [{'second': 12, 'data': 1, 'hour': 21, 'minute': 27},
       {'second': 12, 'data': 2, 'hour': 21, 'minute': 50},
       {'second': 12, 'data': 1, 'hour': 22, 'minute': 28},
       {'second': 12, 'data': 1, 'hour': 23, 'minute': 28},
       {'second': 12, 'data': 'stre', 'hour': 21, 'minute': 28}]

#21:15-21:30 IllegalAgrumentsException 1,
o_data =[]
o_time = []
ot_time = []
agg_data = 0
ind = 0
dataset = {}
except_data = {}
interval = 900
for i in Data:
    time_in_data = '2020-05-17 {}:{}:{}'.format(i['hour'],i['minute'],i['second'])
    time_str =time.strptime(time_in_data,"%Y-%m-%d %H:%M:%S")
    try:
        data_value = int(i['data'])
        hh=time.mktime(time_str,)
        ot_time.append(hh)
        if hh<ot_time[ind]+interval:
            agg_data = agg_data + data_value
        else:
            o_data.append(agg_data)
            o_time.append(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime( hh)))
            ind +=1
            dataset[o_time[-1]] = o_data[-1]
    except:
        except_data[time.strftime("%Y-%m-%d %H:%M:%S",time_str)]= i['data']
print(dataset, except_data)

【讨论】:

  • 我也要安排异常,异常在哪里?
  • 请说明数据条目的例外情况
  • 所以这里的异常名称需要在按日期排序后进行排序。
  • 我需要准确的输出(除了 15 分钟格式化程序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
相关资源
最近更新 更多