def group_by_same_value(by_value):
    """
    Given a collection of cards arranged by value (see `arrange_by_value`),
    cluster the cards into groups of cards of the same value.
    
    The returned value is a list of cards lists, sorted so that the largest
    group is the first item in the list; lists with the same size are sorted
    from highest to lowest value
    """
    
    items = sorted(by_value.items(),
                   key=lambda item: (len(item[1]), item[0]),
                   reverse=True)
    return [lst for _, lst in items if len(lst) != 0]