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

Python 查找以逗号分隔的整数表示的字典值之间的重叠,python,dictionary,range,mapping,overlap,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 di

我有两本字典:

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
  55-88
  55-138
  etc...
我需要的是:44-129。如果我在这个输出上使用max或min,它将打印如下所示的范围块

for k, v in dict1.items():

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

('55-88',)
 etc
  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
虽然这是一个简单的解决方案,但对于大小合理的范围来说,它会相当快


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

您是如何得到“44-129”的,您发布的dict中不存在这样的值。您没有将范围的文本表示转换为实际数字,你也不是在互相核对范围。猫咪狗谢谢!我会努力做这件事。