from collections import defaultdict

def find_pair_by_sum(list_id_value, _sum):
    idx_for_value = defaultdict(list)
    paired = []
    for idx, value in list_id_value:
        try:
            # find the index of corresponding (_sum - value)
            value2 = _sum - value
            idx2 = idx_for_value[value2].pop()
            paired.append(((idx2, value2), (idx, value)))
        except IndexError:
            # cannot find a matched pair
            idx_for_value[value].append(idx)
    rest = [(idx, value) for value in idx_for_value for idx in idx_for_value[value]]
    return paired, rest

L = [(0,1), (1,2), (2,1), (3,1), (4,0), (5,0), (6,3)]

B, rest = find_pair_by_sum(L, 2)
C, D = find_pair_by_sum(rest, 1)

print('list = ', L)
print('B = ', B)
print('C = ', C)
print('D = ', D)