def sort_partition(iterator): """ Sort a partition locally. :param iterator: :return: """ chunk_size = 500 iterator = iter(iterator) chunks = list() while True: chunk = list(itertools.islice(iterator, chunk_size)) chunk.sort(key=lambda kv: key_func(kv[0]), reverse=not ascending) chunks.append(chunk) if len(chunk) < chunk_size: break else: chunks.append(chunk.sort(key=lambda kv: key_func(kv[0]), reverse=not ascending)) return heapq3.merge(chunks, key=lambda kv: key_func(kv[0]), reverse=not ascending)
def test_heapq_key_reversed(): result = list(merge([['dog', 'horse'], ['cat', 'fish', 'kangaroo']], key=len, reverse=True)) assert result == ['dog', 'horse', 'cat', 'fish', 'kangaroo'], GENERIC_ERROR
def test_heapq_reverse(): result = list(merge([[1, 3, 5, 7], [0, 2, 4, 8], [5, 10, 15, 20], [], [25]], key=None, reverse=True)) assert result == [25, 5, 10, 15, 20, 1, 3, 5, 7, 0, 2, 4, 8], GENERIC_ERROR
def test_heapq_1(): result = list(merge([[1, 3, 5, 7], [0, 2, 4, 8], [5, 10, 15, 20], [], [25]], key=None, reverse=False)) assert result == [0, 1, 2, 3, 4, 5, 5, 7, 8, 10, 15, 20, 25], GENERIC_ERROR