#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. Я рад, что мне удалось помочь. Пожалуйста, примите ответ.