我有两个字典:
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...
我知道这个问题可能是幼稚的,但是我是编码的新手,我正在尝试解决该问题,但是我一直得到相同的输出。如果有人可以给我一些提示或解释我在做错什么,那将很棒。
答案 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
尽管是幼稚的解决方案,但对于合理大小的范围它将是相当快的。
或者,您可以使用两个范围的开始值和结束值来数学检查重叠部分,但是这需要一些逻辑并要注意一些边缘情况。