将字典中的键值与每天的电量进行比较

2024-04-29 02:46:44 发布

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

我有一个列表,它记录了一个特定建筑的用电情况。采样每30分钟进行一次。我用字典按天/月对样本进行分组,然后我计算出每天的最大值,然后减去前一天的值,这样我就可以得到当天的总数。其中总功率为千瓦时

我遇到的一个问题是如何计算第一天/第一个月的第一个最大值,因为我无法与之进行比较,因为这是第一个最大值样本?如果有更好的方法,请告诉我? 我计划处理这个问题的方法是在这段时间内,在我得到足够的数据之前,找出最小值和最大值之间的差异

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

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

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

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

list1 =     [[1, 1],
             [1, 1],
             [1, 0],
             [1, 3],
             [1, 4],
             [1, 5],  # max
             [2, 7],
             [2, 8],
             [2, 9],
             [2, 10],
             [2, 15],  # max
             [3, 20],
             [3, 25],
             [3, 40]]  # max

    # using min/max of each day/month I'll miss the usage between the last value for the 
    #  day/month and
    #  first value of next day/month.
    #  ex: day 1: 5 - 1 = 4 , day 2: = 9 - 7 = 2, day 3: 40 - 12 = 28
    #  missed usage from  5 to 7 and 9 to 12

    #  taking the difference between max values of each day/month
    #  ex: day 1: = 5, day 2: = 9, day 3 = 40  day 1 = 4, day 2 = 31
    #
    # 
    dict1 = {}
    dict2 = {}
    dict3 = {}

    for i, j in list1:
        if j > 0:  # Samples will always be greater than zero so eliminate any sample that's not.
            dict1.setdefault(i, []).append(j)  # Group all the samples by day/month.
            dict1[i] = sorted(list(set(dict1[i])))  # Check for duplicate samples
            max_ = max(dict1[i])
            dict2[i] = max_

            

    print(dict1)
    print(dict2)

Tags: ofthe方法列表for字典记录差异
1条回答
网友
1楼 · 发布于 2024-04-29 02:46:44

您可以使用字典理解来完成所需的操作:

  1. list1读入dict1
list1 = [[1, 1], [1, 1], [1, 0], [1, 3], [1, 4], [1, 5],  
         [2, 7], [2, 8], [2, 9], [2, 10], [2, 15],  
         [4, 20], [4, 25], [4, 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, 5], 2: [7, 8, 9, 10, 15], 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}

相关问题 更多 >