【发布时间】:2018-10-29 15:01:03
【问题描述】:
我有以下方式的字典列表:
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中的范围重叠时会发生什么? -
最好它会抛出一个错误,因为它不应该是可能的
-
list2 是否正确?目前这是一个有字典的列表。
-
每个人都只有一场比赛吗?还是可以进行零/多个匹配?
-
@Reut Sharabani:应该不可能有多个匹配项。而且很可能为零也不可能。
标签: python python-3.x