@@ -130,6 +130,7 @@ def __init__(self,
130
130
exclude_types = None ,
131
131
get_deep_distance = False ,
132
132
group_by = None ,
133
+ group_by_sort_key = None ,
133
134
hasher = None ,
134
135
hashes = None ,
135
136
ignore_encoding_errors = False ,
@@ -170,7 +171,7 @@ def __init__(self,
170
171
"ignore_private_variables, ignore_nan_inequality, number_to_string_func, verbose_level, "
171
172
"view, hasher, hashes, max_passes, max_diffs, zip_ordered_iterables, "
172
173
"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, "
174
175
"math_epsilon, iterable_compare_func, _original_type, "
175
176
"ignore_order_func, custom_operators, encodings, ignore_encoding_errors, "
176
177
"_parameters and _shared_parameters." ) % ', ' .join (kwargs .keys ()))
@@ -216,6 +217,14 @@ def __init__(self,
216
217
self .hasher = hasher
217
218
self .cache_tuning_sample_size = cache_tuning_sample_size
218
219
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
219
228
self .encodings = encodings
220
229
self .ignore_encoding_errors = ignore_encoding_errors
221
230
@@ -1607,11 +1616,20 @@ def _group_iterable_to_dict(self, item, group_by, item_name):
1607
1616
except KeyError :
1608
1617
logger .error ("Unable to group {} by {}. The key is missing in {}" .format (item_name , group_by , row ))
1609
1618
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
1611
1626
else :
1612
1627
msg = "Unable to group {} by {} since the item {} is not a dictionary." .format (item_name , group_by , row )
1613
1628
logger .error (msg )
1614
1629
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 )
1615
1633
return result
1616
1634
msg = "Unable to group {} by {}" .format (item_name , group_by )
1617
1635
logger .error (msg )
0 commit comments