如何根据时间划分测试列表,以便每次几乎同一时间?

时间:2016-10-24 08:32:16

标签: python algorithm python-2.7 python-3.x

我正在使用Python Unittest来运行它生成的nose.xml报告的测试用例,我已经解析并创建了字典,如:

{'abc_1': {'duration': 788, 'processed': 0}, 'abc_2': {'duration': 632, 'processed': 0}, 'abc_3': {'duration': 2652, 'processed': 0}, 'abc_4': {'duration': 454, 'processed': 0}, 'abc_5': {'duration': 21, 'processed': 0}, 'abc_6': {'duration': 15, 'processed': 0}, 'abc_7': {'duration': 1200, 'processed': 0}, 'abc_8': {'duration': 8243, 'processed': 0}, 'abc_9': {'duration': 34, 'processed': 0}, 'abc_10': {'duration': 10829, 'processed': 0}, 'abc_11': {'duration': 3879, 'processed': 0}, 'abc_12': {'duration': 121, 'processed': 0}, 'abc_13': {'duration': 684, 'processed': 0}, 'abc_14': {'duration': 1500, 'processed': 0}, 'abc_15': {'duration': 1517, 'processed': 0}, 'abc_16': {'duration': 186, 'processed': 0}, 'abc_17': {'duration': 2033, 'processed': 0}, 'abc_18': {'duration': 1243, 'processed': 0}}

下面, abc _ * 是脚本名称,持续时间是该特定脚本执行所用的总时间。 (例如: - abc_18总共跑了1243秒)。

现在,我想根据时间(持续时间)将所有脚本划分为4个(或5个或6个或动态)不同的组,这样所有组都有相同的时间。

像:

Grp1 - abc_18,abc_1,abc_4
Grp2 - abc_17,abc_10,abc_11
Grp3 - abc_2,abc_3

python是否有任何算法来执行此操作?

How to understand the dynamic programming solution in linear partitioning?中给出的pythonic解决方案正在运行但不确定如何应用我的列表,因为我对python很新:my_list = [(' abc_1',15),( ' abc_2',21),(' abc_3',34),(' abc_4',121),(' abc_5',186) ,(' abc_6',332),(' abc_7',454),(' abc_8',456),(' abc_9', 632),(' abc_10',684),(' abc_11',1200),(' abc_12',1243),(' abc_13&#39 ;,1500),(' abc_14',1517),(' abc_15',2033),(' abc_16',2652),(' abc_17& #39;,3879),(' abc_18',8243),(' abc_19',10829)]

如果有人可以帮助我重新编写该代码,那么这将是很有帮助的。

1 个答案:

答案 0 :(得分:0)

您的示例中的预期结果似乎与您想要的结果不符(abc_18,abc_1,abc_4不具有相同的持续时间)。你能做的就是使用Dict理解

Python dict comprehension

因此,在您的情况下,基本上您可以通过指定字段的值' duration'来过滤成员。通过这个(python 2.7及以上):

>>> print {k : v for k, v in a.iteritems() if v['duration'] == 8243}

结果:

{'abc_8': {'duration': 8243, 'processed': 0}}

希望它有所帮助。