聚合文本键值python defaultdict

聚合文本键值python defaultdict,python,text,python-2.7,Python,Text,Python 2.7,首先,我想指出,我是一名python新手,在编码方面完全没有经验,所以请耐心等待。我已经在寻找我问题的答案,但没有成功。 我在文本中有一大堆行,其中包含以下格式的姓名和团队: Team (year)|Surname1, Name1 e、 g 等了好几年,好几个团队。 我想根据球队(年份)组合汇总球员姓名,删除任何重复的姓名(可能发生在原始数据库中有一些冗余信息)。在本例中,我的输出应该是: Yankees (1993)|Abbot, Jim, Assenmacher, Paul Yankees

首先,我想指出,我是一名python新手,在编码方面完全没有经验,所以请耐心等待。我已经在寻找我问题的答案,但没有成功。 我在文本中有一大堆行,其中包含以下格式的姓名和团队:

Team (year)|Surname1, Name1
e、 g

等了好几年,好几个团队。 我想根据球队(年份)组合汇总球员姓名,删除任何重复的姓名(可能发生在原始数据库中有一些冗余信息)。在本例中,我的输出应该是:

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 = [line.split('|')]
    team = items[0]
    name = items[1]
    teams[team].add(name)
我最终得到了一本由键(团队名称和年份)和值集组成的大词典。但我不知道如何准确地进行汇总

我还可以比较我的最终价值观(例如,有多少球员与1993年和1994年的洋基队有共同之处?)。我该怎么做


非常感谢您提供的任何帮助

对于本例,您应该熟悉Map Reduce,对其进行一些研究,这将对您有所帮助,我相信我这里有一些代码,我正在尝试查找它,同时这是一个很好的起点:

此解决方案不是最佳解决方案,但其工作方式符合您的要求:

for line in w.split('\n'):
    items = line.split('|')
    team = items[0]
    names = items[1].split(',')
    if team in teams:
       teams[team].extend(names)
    else:
       teams[team] = names
从那里你可以使用:

for team, names in teams.iteritems():
    print team, len(set(names))
首先,这一行:

items = [line.split('|')]
应该是:

items = line.split('|')
否则,它将创建一个由列表组成的列表


第二,我改变了这一点:

teams[team].add(name)
为此:

teams[team].add(name.strip())
否则,您将在播放器名称中获得额外的换行符和空格


完整修改的读取代码:

for line in file_in:
    items = line.split('|')
    team = items[0]
    name = items[1]
    teams[team].add(name.strip())
要在以下时间后打印词典:

>>> for team, players in teams.iteritems():
...    print '{}|{}'.format(team, '|'.join(players))
... 
Yankees (1994)|Abbot, Jim
Yankees (1993)|Assenmacher, Paul|Abbot, Jim
Yankees (2000)|Canseco, Jose|Buddies, Mike

请不要一次又一次地发布相同的问题。还有,我已经把它删除并编辑了。这怎么可能仍然存在?拥有10k+代表的人可以查看已删除的问题,所以不要表现得太聪明。很抱歉……我不是故意打扰你,也不知道查看策略。你说的“聚合内容”是什么意思?看起来你的字典正是你想要的?谢谢,这正是我想要做的。。。
>>> for team, players in teams.iteritems():
...    print '{}|{}'.format(team, '|'.join(players))
... 
Yankees (1994)|Abbot, Jim
Yankees (1993)|Assenmacher, Paul|Abbot, Jim
Yankees (2000)|Canseco, Jose|Buddies, Mike