如何用Pythonic方式按类型轮询选取CSV中符合上下文长度的行
求更Pythonic的CSV行选取实现思路
需求说明:
从CSV文件中按type以轮询方式选取所有word_count最小的行,要求尽可能覆盖所有type,且选中行的word_count总和不能超过context_length(固定值为2001)。
给定函数定义:
def get_line_from_input_csv_with_in_context_length(input_file, context_length):
CSV文件字段为line_no,type,word_count,具体数据如下:
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
预期输出:
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
我已经想到了暴力解法,步骤如下:
- 按
type分组输入文件数据,存入字典(键为type,值为对应行的列表) - 对每个
type下的数据按word_count从小到大排序 - 轮询遍历各type的排序后列表,选取最小word_count的行,直到总和超过context_length为止
现在想寻求更Pythonic的实现方式,希望大家能提供指导。
内容的提问来源于stack exchange,提问作者Exploring
相关产品推荐
相关产品推荐

