группировка значений в списке и сохранение их в виде вложенного списка

#python #list #dictionary #list-comprehension #sublist

Вопрос:

Я работаю над проблемой, связанной с системами координат.

Это примерные данные. Ключи в моем словаре представляют координату x, а значения в словаре представляют координату y относительно координаты x.

 data = {0:[1,2,10,35,36,42], 1:[50,55,60,80,85,110]}
 

Я хочу предварительно обработать свои данные таким образом, чтобы, если две последовательные координаты y имеют общую разницу (в данном случае меньше или равную 10), необходимо создать подсписок, и все эти
координаты y должны быть сгруппированы вместе.

Для лучшего понимания результат должен выглядеть следующим образом.

 output_data = {0:[[1,2,10],[35,36,42]], 1:[[50,55,60],[80,85],[110]]}
 

Кто-нибудь может, пожалуйста, предложить решение моей проблемы?

Ответ №1:

Что — то вроде приведенного ниже. Идея состоит в том, чтобы перебрать значения, оглянуться назад и вычислить дельту.

 from collections import defaultdict
DELTA = 10
data = {0:[1,2,10,35,36,42], 1:[50,55,60,80,85,110]}
result = defaultdict(list)
for k,v in data.items():
  temp = [v[0]]
  for idx,x in enumerate(v):
      if idx > 0:
        delta_found = x - temp[-1] > DELTA
        if delta_found :
          result[k].append(temp)
          temp = [x]
        else:
          temp.append(x)
  result[k].append(temp)
print(result)
 

выход

 defaultdict(<class 'list'>, {0: [[1, 2, 10], [35, 36, 42]], 1: [[50, 55, 60], [80, 85], [110]]})
 

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

1. Спасибо вам за ваше решение. Будет работать с этим фрагментом в моем коде.

2. Я рад, что мне удалось помочь. Пожалуйста, примите ответ.