列出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]来获得它