我有一个多维列表:
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]
所以我可以抓住个别元素,并且可能会建立某种功能来完成这项工作,但它会恶心。
是否有人建议如何以蟒蛇方式进行此操作?
答案 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"]
的值。