суммировать одинаковые элемента списка python

Дан список:

s1 = [['REDHEA', 3], ['GADWAL', 1], ['SMEW', 4], ['GRESCA', 10], ['REDHEA', 3], ['GADWAL', 9], ['GRESCA', 15], ['COMEID', 6]]

необходимо суммировать цифровые значения у одинаковых имен:

["COMEID", 6, "GADWAL", 10, "GRESCA", 25, "REDHEA", 6, "SMEW", 4]

после долгих мучений подсмотрел такой варинт:

 s2 = {}
for i in s1:
    if i[0] in s2:
        s[i[0]] += i[-1]
    else:
        s[i[0]] = i[-1]

создаю словарь, в него добавляю первый элемент вложенного списка, если первый элемент вложенного списка уже есть как ключ в словаре, суммирую значения ключа... но мне выдает ошибку:

TypeError: list indices must be integers or slices, not str

не знаю как это победить, ведь на примере, который я опробовал, все работало:

a = [['a', 2], ['b', 3], ['c', 4], ['a', 5]]
s = {}
for i in a:
    if i[0] in s:
        s[i[0]] += i[1]
    else:
       s[i[0]] = i[1]
print(s)

может многоуважаемая публика подскажет как решить эту проблему, или подскажет другое решение?


Ответы (2 шт):

Автор решения: GrAnd

Существует такой подход к заполнению словаря.

s1 = [['REDHEA', 3], ['GADWAL', 1], ['SMEW', 4], ['GRESCA', 10], ['REDHEA', 3], ['GADWAL', 9], ['GRESCA', 15], ['COMEID', 6]]
d1 = {}
for name, value in s1:
    d1[name] = d1.get(name, 0) + value
s2 = list(sum(d1.items(), ()))
→ Ссылка
Автор решения: strawdog

Вот вам для общего развития вариант решения с pandas:

mport pandas as pd
s1 = [['REDHEA', 3], ['GADWAL', 1], ['SMEW', 4], ['GRESCA', 10], ['REDHEA', 3], ['GADWAL', 9], ['GRESCA', 15], ['COMEID', 6]]
res = pd.DataFrame(s1).groupby(0).sum().reset_index().squeeze().values.ravel().tolist()

res:

['COMEID', 6, 'GADWAL', 10, 'GRESCA', 25, 'REDHEA', 6, 'SMEW', 4]
→ Ссылка