从Python

时间:2015-10-06 16:19:31

标签: python sorting

我正在对一组数据进行分析,并返回每个比较的摘要统计信息列表。我的程序打印出结果摘要和包含所有结果的文件。对于摘要,我只想要有限数量的重要结果。因此,我遍历结果并创建所有重要结果的列表列表:

for variable in self.output:
    if self.output_p[variable] <= self.sig_level:
        summary_results.append(MY_LIST)

然后我按照变量名称对(X,Y),字母顺序,然后按降序效果大小对此列表进行排序:

summary_results.sort(key=lambda x: (x[0].lower(), x[1].lower(), -x[3]), reverse=False)

此对(X,Y)显示0到2000次,具体取决于其他变量Z.我想打印每个(X,Y)对的前10个实例(如果(X,Y)出现少于10次然后打印所有实例)。

我的想法是遍历summary_results并跟踪当前和最后(X,Y),计算它出现的次数,而不是在计数时打印&gt; 10.

有更简单,更Pythonic的方式吗?

1 个答案:

答案 0 :(得分:2)

  

我的想法是循环使用summary_results ...计算它出现的次数,而不是在计数时打印&gt; 10。

是的,这就是我这样做的方式。您可以使用itertools.groupby来避免自己手动跟踪对。

import itertools
def truncate_groups(seq, max_group_size, key):
    """yield only the first `max_group_size` elements from each sub-group of `seq`"""
    for key, group in itertools.groupby(seq, key):
        for item in list(group)[:max_group_size]:
            yield item

for row in truncate_groups(summary_results, 10, lambda x: x[0].lower(), x[1].lower()):
    print row