Получение значений ключей из словаря

#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] ]