You need to enable JavaScript to run this app. 如何将Python defaultdict的统计结果格式化为指定格式的字符串输出
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 18:42:02