如何将Python defaultdict的统计结果格式化为指定格式的字符串输出
代码输出格式调整方法
问题背景
现有代码已经可以实现从data.txt读取数据、按组和队伍聚合统计分数、按分数倒序排序的逻辑,但输出格式不符合要求:
原有代码
from collections import defaultdict data=defaultdict(int) with open('data.txt') as f: for line in f: group, score, team = line.split(maxsplit=2) data[(group.strip(),team.replace('\n','').strip())]+=int(score) sorteddata = sorted([[k[0],v,k[1]] for k,v in data.items()], key=lambda x:x[1], reverse=True) print ('\n'.join(map(str, sorteddata)))
示例输入文件(data.txt)
alpha 1 dream team bravo 3 never mind us charlie 1 diehard delta 2 just cool echo 5 dont do it falcon 3 your team lima 6 allofme charlie 10 diehard romeo 12 justnow echo 8 dont do it
当前输出
['echo', 13, 'dont do it'] ['romeo', 12, 'justnow'] ['charlie', 11, 'diehard'] ['lima', 6, 'allofme'] ['bravo', 3, 'never mind us'] ['falcon', 3, 'your team'] ['delta', 2, 'just cool'] ['alpha', 1, 'dream team']
期望输出
echo 13 dont do it romeo 12 justnow charlie 11 diehard lima 6 allofme bravo 3 never mind us falcon 3 your team delta 2 just cool alpha 1 dream team
问题原因
最后一行输出逻辑直接把列表整体转为字符串,会携带列表本身的方括号、元素分隔逗号、字符串元素的引号,导致格式不符。
修复方案
修改最后一行的输出逻辑,对每个排序后的子列表,先把内部所有元素转为字符串,再用空格拼接,再用换行符连接所有行。额外新增了空行判断逻辑,避免文件末尾有空行时split操作报错。
修改后完整代码
from collections import defaultdict data=defaultdict(int) with open('data.txt') as f: for line in f: line = line.strip() if not line: continue group, score, team = line.split(maxsplit=2) data[(group.strip(),team.strip())]+=int(score) sorteddata = sorted([[k[0],v,k[1]] for k,v in data.items()], key=lambda x:x[1], reverse=True) print('\n'.join(' '.join(map(str, item)) for item in sorteddata))
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

