多维列表 - 通过公共字符串元素Y求和整数元素X.

时间:2015-03-19 11:02:05

标签: python arrays multidimensional-array

我有一个多维列表:

multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]]

我试图对元素[1]的实例进行求和,其中元素[0]很常见。

更清楚地说,我想要的输出是另一个多维列表:

multiDimListSum = [['a',3],['b',2],['c',6]]

我看到我可以访问,说价值' 2'在multiDimList

x = multiDimList [3][1]

所以我可以抓住个别元素,并且可能会建立某种功能来完成这项工作,但它会恶心

是否有人建议如何以蟒蛇方式进行此操作?

3 个答案:

答案 0 :(得分:3)

假设您的实际序列具有与示例中所组合在一起的类似元素('a''b'等所有实例),您可以使用itertools.groupby()operator.itemgetter()

from itertools import groupby
from operator import itemgetter

[[k, sum(v[1] for v in g)] for k, g in groupby(multiDimList, itemgetter(0))]

# result: [['a', 3], ['b', 2], ['c', 6]]

答案 1 :(得分:1)

Zero Piraeus的答案涵盖了现场条目按顺序分组的情况。如果他们不是,那么以下是短暂且合理有效的。

from collections import Counter
reduce(lambda c,x: c.update({x[0]: x[1]}) or c, multiDimList, Counter())

这将返回一个可通过元素名称访问的集合。如果您更喜欢它作为列表,您可以在其上调用.items()方法,但请注意,即使在输入为的情况下,输出中的标签顺序也可能与输入中的顺序不同。 一直订购。

答案 2 :(得分:0)

您可以使用dict累积与每个字符串关联的总数

d = {}
multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]]
for string, value in multiDimList:
    # Retrieves the current value in the dict if it exists or 0
    current_value = d.get(string, 0) 
    d[string] += value
print d # {'a': 3, 'b': 2, 'c': 6}

然后,您可以使用b访问d["b"]的值。