2022-01-28

sort and group the dictionary data using Python based on common value

I have list of dictionary. I want to arrange it based on weekday and group by common load value for that weekday, hour and load also need to add end time based on common load values. Merge the start time and end time only if they are in a sequence. hours will start from 00:00 till 23:00. While grouping last hour's end time will be 24:00. example is given below in required_output. few example of required output given below.

data =

[{"masterpeakLoadId":12,'hour': '01:00', 'day': 'Friday', 'load': 1.0}, 
 {"masterpeakLoadId":31,'hour': '05:00', 'day': 'Friday', 'load': 71.0},
 {'masterpeakLoadId':37, 'hour': '06:00', 'day': 'Friday', 'load': 71.0}, 
 {'masterpeakLoadId':54, 'hour': '11:00', 'day': 'Friday', 'load': 5.0},
 {'masterpeakLoadId':59, 'hour': '12:00', 'day': 'Friday', 'load': 6.0},
 {'masterpeakLoadId':65, 'hour': '13:00', 'day': 'Friday', 'load': 7.0},
 {'masterpeakLoadId':82, 'hour': '18:00', 'day': 'Friday', 'load': 5.0},
 {'masterpeakLoadId':87, 'hour': '23:00', 'day': 'Friday', 'load': 6.0},
 {'masterpeakLoadId':92, 'hour': '20:00', 'day': 'Friday', 'load': 7.0}, 
 {'masterpeakLoadId':105, 'hour': '02:00', 'day': 'Friday', 'load': 1.0}, 
 {'masterpeakLoadId':117, 'hour': '04:00', 'day': 'Friday', 'load': 5.0}, 
 {'masterpeakLoadId':125, 'hour': '00:00', 'day': 'Friday', 'load': 1.0},
 {'masterpeakLoadId':132, 'hour': '03:00', 'day': 'Friday', 'load': 66.0}, 
 {'masterpeakLoadId':8, 'hour': '01:00', 'day': 'Monday', 'load': 25.0},
 {'masterpeakLoadId':27, 'hour': '00:00', 'day': 'Monday', 'load': 6.0}, 
 {'masterpeakLoadId':33, 'hour': '06:00', 'day': 'Monday', 'load': 45.0}]

required output =

[{"day":'Friday',"start_time":00:00, "end_time":03:00, "load":1.0 },
{"day":'Friday',"start_time":03:00, "end_time":04:00, "load":66.0},
{"day":'Friday',"start_time":04:00, "end_time":05:00, "load":5.0},
{"day":'Friday',"start_time":05:00, "end_time":07:00, "load":71.0},
{"day":'Monday',"start_time":23:00, "end_time":24:00, "load":6.0},
{"day":'Monday',"start_time":01:00, "end_time":02:00, "load":25.0},
{'day':'Monday',"start_time":06:00, "end_time":07:00, "load":45.0}]

If you will see the output we have merged the start time 00:00 till 03:00 on Friday because hours are in a sequence for same day and load values are also same. I am new to python need help to achieve this result, following code I have tried.

peak Load = []
context = {}
sortedDictRecords = sorted(data, key=lambda d:d['day'])
print(sortedDictRecords)
groups = groupby(sortedDictRecords,key=lambda d:d['hour'])
sortedPeakLoadRecords = [ {'hour':sid,
                'loads':[(r.pop('hour'),r)[1] for r in record]}
               for sid,record in groups ]


from Recent Questions - Stack Overflow https://ift.tt/3AB47tg
https://ift.tt/eA8V8J

No comments:

Post a Comment