Pick all lines with the smallest word_count from a CSV file in a round-robin fashion based on type (so that all types are present as much as possible) that fit within the context length.
def get_line_from_input_csv_with_in_context_length(input_file, context_length):
context_length = 2001
I have a CSV file containing the following fields:
line_no,type,word_count
1,assertEquals,704
2,assertThat,303
3,assertNotNull,159
4,assertThat,348
5,assertFalse,186
6,assertArrayEquals,699
7,assertEquals,119
8,assertTrue,314
9,assertEquals,552
10,assertSame,151
11,assertEquals,110
12,assertEquals,210
13,assertTrue,807
14,assertTrue,1231
15,assertEquals,541
16,assertEquals,1435
17,assertEquals,305
18,assertEquals,134
19,assertArrayEquals,641
20,assertEquals,800
21,assertEquals,522
22,assertEquals,150
23,assertThat,608
24,assertArrayEquals,280
25,assertEquals,245
26,assertEquals,364
27,assertEquals,637
28,assertEquals,615
29,assertThat,362
30,assertTrue,1468
Here expected output:
assertEquals, line_no= 110, 119, 134, 245
assertThat, line_no= 303
assertNotNull, line_no= 159
assertFalse, line_no= 186
assertArrayEquals, line_no= 280
assertSame, line_no= 151
assertTrue, line_no=314
I know how to do it in a brute force way i.e.:
- Grouping the input file based on
typeand putting it into a list of a multi-dictionary. - Then, sort each entry of that multi-dictonary i.e. for each type based on
word_countand put that in a list. - Now iterate
list of listand pick the smallest until I hit thecontext_length.
But I am sure there is a more pythonic way to achieve this. Can anyone suggest me any pointers?