





Вы можете использовать это:
Dict = {group[0]: 0 for group in Input}
for group in Input: Dict[group[0]] += group[1]
Output = [[group, value] for group, value in Dict.items()]
У dict могут быть только уникальные ключи, поэтому мы решаем половину проблем. Для начала каждое значение каждого ключа будет равно 0.
Затем мы повторяем Input и добавляем каждое значение к соответствующему ключу в нашем Dict. Итак, наша работа почти завершена.
Нам нужно только преобразовать его в желаемую форму, используя список понимания.
Вы можете суммировать по равным ключам, используя словарь. Если вам действительно нужно, вы все равно можете воссоздать результат в список списков через понимание списка:
lst = [["A",0.2],["B",0.5],["A",0.6],["C",0.1],["B",0.9]]
d = dict()
for sl in lst:
d[sl[0]] = d.get(sl[0], 0) + sl[1]
res = [[k, v] for k, v in d.items()]
d.get(sl[0], 0) великолепен, он сильно упрощает цикл for! +1
Спасибо, работает идеально!
Я бы порекомендовал пойти на dict, как показано ниже:
inp = [["A",0.2],["B",0.5],["A",0.6],["C",0.1],["B",0.9]]
#create an empty dict
out = {}
#for each element of the inp list
for a in inp:
#if the key does already exist in the dict, you sum the current value
#with what was found in the array at this iteration
if a[0] in out:
out.update({a[0]:a[1]+out.get(a[0])})
#you create a new pair (new key, new value) extract from inp
else:
out.update({a[0]:a[1]})
print out
#if you really need a nested list as output you can convert back the dict
#into a list of list
res = [[key, val] for key, val in out.items()]
print res
выход:
{'A': 0.8, 'C': 0.1, 'B': 1.4}
[['A', 0.8], ['C', 0.1], ['B', 1.4]]
Вы можете сделать это:
from collections import defaultdict
sums = defaultdict(lambda: 0)
for arr in input:
sums[arr[0]] += arr[1]
output = [[key, value] for key,value in sums.items()]
Этот способ кажется мне наиболее идиоматичным. Следуя соглашению Python, вы должны называть свои переменные строчными буквами и символом подчеркивания. Вы можете узнать больше о defaultdict здесь: https://docs.python.org/3.6/library/collections.html
Это должно работать:
Output = [ [k,sum(a[1] for a in Input if a[0] == k)] for k in set(a[0] for a in Input) ]
Я предлагаю вам начать с листа бумаги и карандаша и записать шаги, необходимые для этого. Как только у вас в голове появится четкая идея, используя английский или любой другой письменный язык, который вы знаете лучше всего, вам будет легче перевести его на python.