1
1
import cython
2
+ from collections import defaultdict
2
3
from cython import Py_ssize_t
3
4
4
5
from cpython.slice cimport PySlice_GetIndicesEx
@@ -373,8 +374,7 @@ def get_blkno_indexers(int64_t[:] blknos, bint group=True):
373
374
Py_ssize_t i, start, stop, n, diff
374
375
375
376
object blkno
376
- list group_order
377
- dict group_dict
377
+ object group_dict = defaultdict(list )
378
378
int64_t[:] res_view
379
379
380
380
n = blknos.shape[0 ]
@@ -395,28 +395,16 @@ def get_blkno_indexers(int64_t[:] blknos, bint group=True):
395
395
396
396
yield cur_blkno, slice (start, n)
397
397
else :
398
- group_order = []
399
- group_dict = {}
400
-
401
398
for i in range (1 , n):
402
399
if blknos[i] != cur_blkno:
403
- if cur_blkno not in group_dict:
404
- group_order.append(cur_blkno)
405
- group_dict[cur_blkno] = [(start, i)]
406
- else :
407
- group_dict[cur_blkno].append((start, i))
400
+ group_dict[cur_blkno].append((start, i))
408
401
409
402
start = i
410
403
cur_blkno = blknos[i]
411
404
412
- if cur_blkno not in group_dict:
413
- group_order.append(cur_blkno)
414
- group_dict[cur_blkno] = [(start, n)]
415
- else :
416
- group_dict[cur_blkno].append((start, n))
405
+ group_dict[cur_blkno].append((start, n))
417
406
418
- for blkno in group_order:
419
- slices = group_dict[blkno]
407
+ for blkno, slices in group_dict.items():
420
408
if len (slices) == 1 :
421
409
yield blkno, slice (slices[0 ][0 ], slices[0 ][1 ])
422
410
else :
0 commit comments