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



>我有两个字典:

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((,它会打印范围块(如下所示(。

for k, v in dict1.items():
    conv = tuple([v])
    print(max(conv))

输出

  55-88
  55-138
  etc...

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

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

例如:

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

虽然这是一个幼稚的解决方案,但对于合理大小的范围来说,它会相当快。

或者,您可以使用两个范围的开始值和结束值在数学上检查重叠,但这需要一些逻辑并处理一些边缘情况。

最新更新