我有这样的数组:
['[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
答案 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
。您可以在此处阅读defaultdict
:https://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)
您可以使用groupby将sid
或lambda x: x[0]
作为关键字,按照第一个索引对条目进行分组。
这可能比Nick Brady所展示的代码少一些。但是,您需要先对列表进行排序(对于相同的键),因此它可能比他的方法慢。