Нахождение перекрытия между значениями словаря, выраженными в виде целых чисел через запятую - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть два словаря:

dict1 = {'IDa': '55-88', 'IDb': '55-138', 'IDc': '225-383'}

dict2 = {'IDa': '44-150', 'IDb': '44-127', 'IDc': '44-88'}

Когда идентификатор совпадает между двумя словарями, и значения совпадают, я сохраняю идентификатор и два диапазона.Пока я пытался заставить работать функции max () и min (), которые планировал использовать для вычисления перекрытий.

Для этого я попытался преобразовать значения dict1 и dict2для кортежей, чтобы я мог использовать функции max () и min ().

for k, v in dict1.items():

    conv = tuple([v])
    print(conv)        

вывод

('55-88',)
 etc

, что мне нужно было бы: (44-129).Если я использую max () или min () на этом выходе, он печатает блок диапазона (как показано ниже).

for k, v in dict1.items():

    conv = tuple([v])
    print(max(conv))

output

  55-88
  55-138
  etc...

Я знаю, что проблема может бытьнаивный, но я новичок в кодировании, и я пытаюсь решить проблему, но я продолжаю получать тот же результат.Если бы кто-то мог дать мне подсказку или объяснить, что я делаю неправильно, это было бы здорово.

1 Ответ

1 голос
/ 02 апреля 2019

Сначала вы должны извлечь соответствующие целые числа.Затем вы можете «злоупотреблять» наборами и проверять пересечения между диапазонами.Если пересечение не пустое, это означает, что имеется перекрытие.

Например:

range1 = '45-90'
range2 = '48-93'

range1_start, range1_end = map(int, range1.split('-'))
range2_start, range2_end = map(int, range2.split('-'))

if set(range(range1_start, range1_end)) & set(range(range2_start, range2_end)):
    print('overlap found')
# overlap found

Хотя это наивное решение, оно будет довольно быстрым для диапазонов разумного размера.

В качестве альтернативы вы можете использовать начальные и конечные значения обоих диапазонов для математической проверки перекрытий, но это потребует некоторой логики и заботы о некоторых крайних случаях.

...