比较字典中的键值作为每天的用电量

问题描述

我有一个记录特定建筑物用电量的列表。采样每 30 分钟进行一次。我正在使用字典按天/月对样本进行分组,之后我想我可以取每一天的最大值并减去第二天 - 前一天,这样我就可以获得当天的总数。其中总数为千瓦时。

我遇到的一个问题是考虑第一天/第一个月的第一个最大值,因为我没有什么可以比较的,因为那是第一个最大样本?如果有更好的方法请告诉? 我计划处理这个问题的方法是在那段时间内找到 min max 之间的差异,直到我获得足够的数据。

我创建了一个列表列表作为示例。第一列将是月份和第二个记录值。

下面显示了按月份分组的字典,然后找到最大值。 您可以看到,一旦找到最大值和差异,就不会考虑第 1 个月吗?我应该得到的结果是 {1:4,2:10,3:25} 这是按月总计的,然后 {1:39} 一年?

JAVA_OPTS="-xms2048M -Xmx2048M"

这是到目前为止的代码,因为我的方法不起作用,我注释掉了获得年度和月份总数的操作?

dict1 = {1: [1,3,4,5],2: [7,8,9,10,15],3: [20,25,40]}
dict2 = {1: 5,2: 15,3: 40} 

解决方法

你可以使用字典推导做你需要的事情:

  1. list1 读入 dict1
list1 = [[1,1],[1,0],3],4],5],[2,7],8],9],10],15],[4,20],25],40]]
months = sorted(set(l[0] for l in list1))
dict1 = {m: sorted(set(l[1] for l in list1 if l[0]==m and l[1]>0)) for m in months}
>>> dict1
{1: [1,3,4,2: [7,8,9,10,4: [20,25,40]}
  1. 操作 dict1 以获取差异:

您可以简单地将索引 -1 和 0 用于最大值和最小值,因为列表是针对每个日期进行排序的。

dict2 = {m: dict1[m][-1]-dict1[m-1][-1] if m-1 in dict1 and dict1[m][0]>=dict1[m-1][-1] else dict1[m][-1]-dict1[m][0] for i,m in enumerate(months)}
>>> dict2
{1: 4,2: 10,4: 20}
  1. 使用 dict2 获取当年的总数:
dict3 = {1: sum(dict2.values())}
>>> dict3
{1: 34}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...