我可以这样列出一组字典:
list1 = [{'some_id': 1, 'lower_range': 3, 'upper_range': 7},
{'some_id': 2, 'lower_range': 8, 'upper_range': 12},
{'some_id': 3, 'lower_range': 13, 'upper_range': 16}]
第二个列表包含一些整数:
list2 = [{'value': 4, 'data': 'A'},
{'value': 8, 'data': 'B'},
{'value': 9, 'data': 'C'},
{'value': 15, 'data': 'D'}]
我现在想要将
'some_id'
和'data'
合并在一起,使得'value'
在'lower_range'
和'upper_range'
'之间,并生成新列表。也就是说,我希望输出结果为:list3 = [{'some_id': 1, 'data': 'A'},
{'some_id': 2, 'data': 'B'},
{'some_id': 2, 'data': 'C'},
{'some_id': 3, 'data': 'D'}]
有一种方法可以实现这个目标:
list3 = []
for i in list1:
for j in list2:
if (j['value'] >= i['lower_range'] and
j['value'] <= i['upper_range']):
list3.append({'some_id': i['some_id'], 'data': j['data']})
然而,这种方法似乎非常低效。有没有更快的方法?
list1
中的范围重叠时,应该发生什么? - Mr. Tlist1
和list2
是否以任何方式进行了预处理?换句话说,这些数据值是否具有保证的属性?特别地,list1
是否已排序,使得范围按递增顺序且没有重叠,并且list2
是否也已排序,使得value
的值递增?(例如,list2
可以包含一个有序字典。)如果是这样,那么有一种简单快速的算法可以实现此目的。如果不是,则可以先对这些值进行排序。 - Rory Daulton