查找表示为逗号分隔的整数的字典值之间的重叠

时间:2019-04-02 12:27:00

标签: python dictionary range mapping overlap

我有两个字典:

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

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

当两个字典之间的ID相同并且值之间有重叠时,我将存储ID和两个范围。现在,我正在尝试使max()和min()函数正常工作,我正计划使用这些函数来计算重叠。

为此,我尝试将dict1和dict2的值转换为元组,以便可以使用max()和min()函数。

for k, v in dict1.items():

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

输出

('55-88',)
 etc

我需要的是:(44-129)。如果我在此输出上使用max()或min(),它将打印range块(如下所示)。

for k, v in dict1.items():

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

输出

  55-88
  55-138
  etc...

我知道这个问题可能是幼稚的,但是我是编码的新手,我正在尝试解决该问题,但是我一直得到相同的输出。如果有人可以给我一些提示或解释我在做错什么,那将很棒。

1 个答案:

答案 0 :(得分:1)

首先,您必须提取相应的整数。然后,您可以“滥用”设置并检查范围之间的交集。如果交集不为空,则表示存在重叠。

例如:

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

尽管是幼稚的解决方案,但对于合理大小的范围它将是相当快的。

或者,您可以使用两个范围的开始值和结束值来数学检查重叠部分,但是这需要一些逻辑并要注意一些边缘情况。