#python #dictionary
#python #словарь
Вопрос:
У меня есть словарь с индексами в качестве ключей и временными метками в качестве значений. Я хотел получить ключи, значения которых перекрываются.
пример:
{1: 19-13-30
19-13-32
19-13-33
.
.
19-13-55,
2: 19-13-25
19-13-26
19-13-27
.
.
19-13-35,
3:19-13-10
19-13-31
.
.
19-13-18}
Для приведенных выше значений словаря 1 и 2 перекрываются (от 19-13-30 до 19-13-35). Итак, я хочу возвращать ключи всякий раз, когда происходит перекрытие. В этом случае 1 и 2
Для вычисления перекрытия я перебираю значения и сохраняю время начала и окончания в списке типа [starttime, endtime] . Затем я проверяю перекрытие с помощью
overlapping = [ [x,y] for x in intervals for y in intervals if x is not y and x[1]>y[0] and x[0]<y[0] ]
for x in overlapping:
print '{0} overlaps with {1}'.format(x[0],x[1])
При этом выводятся значения, которые перекрываются.Но вместо этого я хочу ключи, значения которых перекрываются.
Ответ №1:
В соответствии с вашим кодом, это должно быть минимальное изменение:
intervals= {1:[1,2], 2:[2,3], 3:[4,5], 4:[6,8], 5:[6.5,7]}
overlapping = [ [i,j,x,y] for i,x in intervals.iteritems() for j,y in intervals.iteritems() if x is not y and x[1]>y[0] and x[0]<y[0] ]
for x in overlapping:
print '{0} overlaps with {1} at {2} and {3}'.format(x[2],x[3],x[0],x[1])
Ответ №2:
Вместо перебора интервалов вы можете перебирать значения (т. Е. Позиции в вашем списке интервалов). Что-то вроде
keys = range(len(intervals))
overlapping = [ [x,y] for x in keys for y in keys if x is not y and intervals[x][1]>intervals[y][0] and intervals[x][0]<intervals[y][0] ]