在Python中使用指定索引求和数组值

时间:2017-07-20 23:26:19

标签: python arrays

我有这样的数组:

['[camera_positive,3]', '[lens_positive,1]', '[camera_positive,2]', '[lens_positive,1]', '[lens_positive,1]', '[camera_positive,1]']

如何将索引[1]上的所有值与索引[0]上的相同字符串相加?
例如:

camera_positive = 3 + 2 + 1 = 6
lens_positive = 1 + 1 + 1 = 3

3 个答案:

答案 0 :(得分:1)

您可以使用set来提取唯一键,然后使用列表推导来计算每个键的总和:

data = [['camera_positive', 3], 
        ['lens_positive', 1], 
        ['camera_positive', 2], 
        ['lens_positive', 1], 
        ['lens_positive', 1], 
        ['camera_positive', 1]]

keys = set(key for key, value in data)

for key1 in keys:
    total = sum(value for key2, value in data if key1 == key2)
    print("key='{}', sum={}".format(key1, total))

这给出了:

key='camera_positive', sum=6
key='lens_positive', sum=3

答案 1 :(得分:0)

我假设您有一个列表列表,而不是问题中显示的字符串列表。否则你必须做一些解析。也就是说,我会通过创建一个字典来解决这个问题,然后迭代这些值并将它们添加到字典中。

默认的dict允许此程序在没有出现密钥错误的情况下工作,因为如果密钥尚不存在,它将假设0。您可以在此处阅读defaultdicthttps://docs.python.org/3.3/library/collections.html#collections.defaultdict

如果有帮助的话,请小心!

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d
defaultdict(<class 'int'>, {})
>>> lst=[['a',1], ['b', 2], ['a',4]]
>>> for k, v in lst:
...   d[k] += v
... 
>>> d
defaultdict(<class 'int'>, {'a': 5, 'b': 2})

答案 2 :(得分:0)

您可以使用groupbysidlambda x: x[0]作为关键字,按照第一个索引对条目进行分组。

这可能比Nick Brady所展示的代码少一些。但是,您需要先对列表进行排序(对于相同的键),因此它可能比他的方法慢。