我在文本中有很多行,其中包含以这种格式的名称和团队:
Team (year)|Surname1, Name1
e.g。
Yankees (1993)|Abbot, Jim
Yankees (1994)|Abbot, Jim
Yankees (1993)|Assenmacher, Paul
Yankees (2000)|Buddies, Mike
Yankees (2000)|Canseco, Jose
等几年和几个团队。 我想根据团队(年份)组合汇总玩家名称,删除任何重复的名称(原始数据库中可能会发生一些冗余信息)。在示例中,我的输出应为:
Yankees (1993)|Abbot, Jim|Assenmacher, Paul
Yankees (1994)|Abbot, Jim
Yankees (2000)|Buddies, Mike|Canseco, Jose
我到目前为止编写了这段代码:
file_in = open('filein.txt')
file_out = open('fileout.txt', 'w+')
from collections import defaultdict
teams = defaultdict(set)
for line in file_in:
items = [entry.strip() for entry in line.split('|') if entry]
team = items[0]
name = items[1]
teams[team].add(name)
我最终得到了一个由键组成的大词典(团队名称和年份)和值集。但我不知道如何继续汇总。
我也可以比较我的最终价值观(例如,有多少玩家拥有1993年和1994年的Yankee团队?)。我怎么能这样做?
感谢任何帮助
答案 0 :(得分:0)
您可以在此处使用元组作为键,例如。 ('Yankees', '1994')
:
from collections import defaultdict
dic = defaultdict(list)
with open('abc') as f:
for line in f:
key,val = line.split('|')
keys = tuple(x.strip('()') for x in key.split())
vals = [x.strip() for x in val.split(', ')]
dic[keys].append(vals)
print dic
for k,v in dic.iteritems():
print "{}({})|{}".format(k[0],k[1],"|".join([", ".join(x) for x in v]))
<强>输出:强>
defaultdict(<type 'list'>,
{('Yankees', '1994'): [['Abbot', 'Jim']],
('Yankees', '2000'): [['Buddies', 'Mike'], ['Canseco', 'Jose']],
('Yankees', '1993'): [['Abbot', 'Jim'], ['Assenmacher', 'Paul']]})
Yankees(1994)|Abbot, Jim
Yankees(2000)|Buddies, Mike|Canseco, Jose
Yankees(1993)|Abbot, Jim|Assenmacher, Paul