你可以使用
collections.defaultdict
,迭代和更新由bucket边界确定的键。这比创建可变数量的变量更好。
d = {(0, 2): 1, (0, 4): 2, (0, 10): 3, (0, 3): 4,
(0, 11): 5, (0, 20): 6, (0, 8): 7, (0, 14): 8}
L = [0, 5, 10, 15, float('inf')] # include infinite to facilitate later comparisons
from collections import defaultdict
dd = defaultdict(dict)
for k, v in d.items():
for i, j in zip(L, L[1:]):
if i <= k[1] < j:
dd[i].update({k: v})
break
print(dd)
defaultdict(dict,
{0: {(0, 2): 1, (0, 3): 4, (0, 4): 2},
5: {(0, 8): 7},
10: {(0, 10): 3, (0, 11): 5, (0, 14): 8},
15: {(0, 20): 6}})
该算法可以通过使用
bisect
而不是在
L
按顺序。