@@ -130,6 +130,7 @@ def __init__(self,
130130 exclude_types = None ,
131131 get_deep_distance = False ,
132132 group_by = None ,
133+ group_by_sort_key = None ,
133134 hasher = None ,
134135 hashes = None ,
135136 ignore_encoding_errors = False ,
@@ -170,7 +171,7 @@ def __init__(self,
170171 "ignore_private_variables, ignore_nan_inequality, number_to_string_func, verbose_level, "
171172 "view, hasher, hashes, max_passes, max_diffs, zip_ordered_iterables, "
172173 "cutoff_distance_for_pairs, cutoff_intersection_for_pairs, log_frequency_in_sec, cache_size, "
173- "cache_tuning_sample_size, get_deep_distance, group_by, cache_purge_level, "
174+ "cache_tuning_sample_size, get_deep_distance, group_by, group_by_sort_key, cache_purge_level, "
174175 "math_epsilon, iterable_compare_func, _original_type, "
175176 "ignore_order_func, custom_operators, encodings, ignore_encoding_errors, "
176177 "_parameters and _shared_parameters." ) % ', ' .join (kwargs .keys ()))
@@ -216,6 +217,14 @@ def __init__(self,
216217 self .hasher = hasher
217218 self .cache_tuning_sample_size = cache_tuning_sample_size
218219 self .group_by = group_by
220+ if callable (group_by_sort_key ):
221+ self .group_by_sort_key = group_by_sort_key
222+ elif group_by_sort_key :
223+ def _group_by_sort_key (x ):
224+ return x [group_by_sort_key ]
225+ self .group_by_sort_key = _group_by_sort_key
226+ else :
227+ self .group_by_sort_key = None
219228 self .encodings = encodings
220229 self .ignore_encoding_errors = ignore_encoding_errors
221230
@@ -1607,11 +1616,20 @@ def _group_iterable_to_dict(self, item, group_by, item_name):
16071616 except KeyError :
16081617 logger .error ("Unable to group {} by {}. The key is missing in {}" .format (item_name , group_by , row ))
16091618 raise
1610- result [key ] = row
1619+ if self .group_by_sort_key :
1620+ if key not in result :
1621+ result [key ] = []
1622+ if row not in result [key ]:
1623+ result [key ].append (row )
1624+ else :
1625+ result [key ] = row
16111626 else :
16121627 msg = "Unable to group {} by {} since the item {} is not a dictionary." .format (item_name , group_by , row )
16131628 logger .error (msg )
16141629 raise ValueError (msg )
1630+ if self .group_by_sort_key :
1631+ for key , row in result .items ():
1632+ row .sort (key = self .group_by_sort_key )
16151633 return result
16161634 msg = "Unable to group {} by {}" .format (item_name , group_by )
16171635 logger .error (msg )
0 commit comments