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