列出python中的聚合

列出python中的聚合,python,list,Python,List,我已经尝试了一段时间来解决以下问题: 我有以下格式的列表: [[u'unicode_text', 5, 395, 2, 0, 2 .. n], [u'unicode_text', 235, 5, 3, 3, 10 .. n], [u'other_unicode_text', 3, 65, 28, 16, 52 .. n], ... [u'unicode_text', 95, 5, 8, 7, 38 .. n]] 我正在尝试创建一个新的列表,其中将包含由列表中的文本元素分组的数字的总

我已经尝试了一段时间来解决以下问题: 我有以下格式的列表:

[[u'unicode_text', 5, 395, 2, 0, 2 .. n], 
 [u'unicode_text', 235, 5, 3, 3, 10 .. n], 
 [u'other_unicode_text', 3, 65, 28, 16, 52 .. n],
 ...
 [u'unicode_text', 95, 5, 8, 7, 38 .. n]]
我正在尝试创建一个新的列表,其中将包含由列表中的文本元素分组的数字的总和。上述操作的结果如下所示:

[[u'unicode_text', 335, 405, 13, 10, 50 .. n],
 [u'other_unicode_text', 3, 65, 28, 16, 52 .. n]]
我尝试了很多方法,但都没有找到一个完美的解决方案。Zip不适用于unicode文本,itertools groupby适用于字典

由于数据是由每个子列表中的第一项键入的,因此字典是更好的输出容器,您可以执行以下操作:

import operator

output = dict()
container =  [[u'unicode_text', 5, 395, 2, 0, 2],
              [u'unicode_text', 235, 5, 3, 3, 10],
              [u'other_unicode_text', 3, 65, 28, 16, 52],
              [u'unicode_text', 95, 5, 8, 7, 38]]

for sublist in container:
    try:
        output[sublist[0]] = map(operator.add, output[sublist[0]], sublist[1:])
    except KeyError:
        output[sublist[0]] = sublist[1:]
这是一种非常简单的方法,如果是我们第一次看到一个键,那么我们只需将值设置为列表,否则我们将每个值相加并存储新的汇总列表,给出:

{ u'other_unicode_text': [3, 65, 28, 16, 52], 
  u'unicode_text':       [335, 405, 13, 10, 50] }
如果您已安装pandas,这将很容易:

In [5]: d=[[u'uicode_text', 5, 395, 2, 0, 2  ], 
   ...:  [u'uicode_text', 235, 5, 3, 3, 10  ], 
   ...:  [u'other_uicode_text', 3, 65, 28, 16, 52  ],
   ...:  [u'uicode_text', 95, 5, 8, 7, 38  ]]

In [6]: import pandas as pd
   ...: df=pd.DataFrame(d)
   ...: print df.groupby(0).sum()
                     1    2   3   4   5
0                                      
other_uicode_text    3   65  28  16  52
uicode_text        335  405  13  10  50

itertools.groupby适用于任何iterable.OrderedDict,但它提供了一个分组列表列表。有没有其他方法不象['txt',[2,3]]而是['txt',2,3]。我可能遗漏了什么。谢谢你可以使用:['txt']+[2,3]来获得它