@@ -98,20 +98,20 @@ """ start = default_timer() - formatted = ( f'{sk}\t{sv}' - for sk, sv in sort_via_cmp_to_key( cat_count ) + formatted = ( f'{k}\t{cat_count[ k ]}' + for k in sort_via_cmp_to_key( cat_count ) ) time_stat['sort+format time'] = default_timer() - start return formatted -# Takes ~115-120 s. -def sort_via_cmp_to_key( cat_count :dict[ str, int ] ) ->Generator[ tuple[ str, int ], None, None ]: +# Takes ~103-115 s. +def sort_via_cmp_to_key( cat_count :dict[ str, int ] ) ->list[ str ]: """ Returns: - A generator of 2-element `tuple`s of category & total count, sorted by - total count in descending order & by category in ascending order. + A a `list` of sorted keys; sorted by total count in descending order & by + category in ascending order. Args: cat_count: `dict` of category as key & total count as value. @@ -137,9 +137,7 @@ # comparator = cmp_to_key( compare_desc_count_asc_cat ) - out = ( ( k, cat_count[ k ] ) - for k in sorted( cat_count.keys(), key = comparator ) - ) + out = sorted( cat_count.keys(), key = comparator ) time_stat['sort_via_cmp_to_key time'] = default_timer() - start return out @@ -165,6 +163,12 @@ time_stat['output time'] = output_end_time - process_end_time time_stat['total time'] = output_end_time - process_start_time # +decimal_place = 1 +round_format = f'.{decimal_place}f' +time_width = max( len( f'{t:{round_format}}' ) for t in time_stat.values() ) \ + + decimal_place +1 +label_width = max( len( label ) for label in time_stat.keys() ) +# for label, time_taken in time_stat.items(): - sys.stderr.write( f'{label} : {time_taken:0.1f}\n' ) + sys.stderr.write( f'{label:{label_width}}: {time_taken:{time_width}{round_format}} s\n' )