You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:57:19