0

我有一堆文本行,其中包含这种格式的名称和团队:

Team (year)|Surname1, Name1

例如

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 年有多少球员有共同点?)。我怎样才能做到这一点?

任何帮助表示赞赏

4

1 回答 1

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
于 2013-07-01T13:31:11.273 回答