Объедините список значений в слоты с помощью python

#python

Вопрос:

Я пытаюсь объединить список значений в определенные интервалы.

У меня есть строка ниже, которая представляет units: timestamp

 2:0,1: 9,5:10,2:12,4:19,5:35  

что подразумевает приведенную ниже информацию:

 units: 2, timestamp: 0 units: 1, timestamp: 9 units: 5, timestamp: 10 units: 2, timestamp: 12 units: 4, timestamp: 19 units: 5, timestamp: 35  

Я пытаюсь рассчитать максимальное значение в интервалах 10

Вот мое решение до сих пор:

 units_to_parse = '2:0,1:9,5:10,2:12,4:19,5:35'  def parse_units(units_to_parse):  units_to_parse = units_to_parse.split(',')    units = []  cur_timestamp = 0    for pair in units_to_parse:  unit = pair.split(':')[0]  timestamp = int(pair.split(':')[1])  if timestamp lt; cur_timestamp   10:  units.append(unit)  elif timestamp gt;= cur_timestamp   10:  print(f"{cur_timestamp}, {max(units)}")  units = [unit]  cur_timestamp = cur_timestamp   10   if __name__ == '__main__':  parse_units( units_to_parse)   

Я пытаюсь заполнить недостающие слоты максимальным значением предыдущего слота. Что-то вроде этого:

 {timeslot: maxvalue} {0: 2} {10: 5} {20: 5} {30: 5}  

есть ли хороший способ заполнить недостающую информацию о слоте здесь?

Ответ №1:

Здесь вам нужно найти max timestamp и min timestamp . И сформируйте словарь ключевых значений на основе этой метки времени.

Обратите внимание, что ключ всегда является меткой времени, так как он должен быть уникальным в словаре

 units_to_parse = '2:0,1:9,5:10,2:12,4:19,5:35,7:38,0:40,6:55,9:75' def parse_units(units_to_parse):  units_to_parse = units_to_parse.split(',')    max_timestamp = max([int(a.split(':')[1]) for a in units_to_parse])  max_timestamp = max_timestamp - (max_timestamp)    min_timestamp = min([int(a.split(':')[1]) for a in units_to_parse])  min_timestamp = min_timestamp - (min_timestamp)    time_val = {int(a.split(':')[1]):int(a.split(':')[0]) for a in units_to_parse} #form a dictionary where key should be timestamp  temp_val = {}  for t in range(min_timestamp, max_timestamp 1, 10):  try:  t_range = list(range(t, t 10))  v_range = [v for k,v in time_val.items() if k in t_range]  print(t, max(v_range))  temp_val[t] = max(v_range)  except: #if key is not found  print(t, list(temp_val.values())[-1])  temp_val[t] = list(temp_val.values())[-1]   if __name__ == '__main__':  parse_units(units_to_parse)  

Комментарии:

1. спасибо за предложение, приведенное выше решение не дает максимального значения для конкретного слота. Например, если у нас есть вход, как ''2:0,1:9,5:10,2:12,4:19,5:35, 7:38" мы получаем вывод : 0 2 10 5 20 5 30 5, но предполагаемый вывод : 0 2 10 5 20 5 30 7

2. здесь слот 30 имеет метки времени (35, 38) и их значения (5, 7), поэтому максимальное значение слота(30) будет 7

3. итак, слот 30 колеблется от 30-40 до 20-30? Я не совсем ясно понял ваш вопрос

4. извините, я мог бы сформулировать свой вопрос более ясно. Слот 30 будет иметь значения временных меток [30-40) 30, включенные до 39, но не 40

5. @CodingBabai только что обновил ответ, проверьте его