вы, вероятно, делаете L = L.sort()
... что объясняет результат None
(классическая проблема Почему "return list.sort ()" возвращает None, а не список? )
В любом случае, сортировка + группировка (например, с использованием itertools.groupby
) не лучший способ.Плохая сложность: O(n*log(n)) + O(n)
Вместо этого создайте collections.defaultdict
и "подсчитайте" свои элементы (collections.Counter
здесь не работает, так как количество зависит от значения третьего аргумента, преобразованного в целое число).
Затем перестроите триплеты, распаковав ключи и значения словаря.
import collections
L = [('A54', 'ItemName1', '18'), ('B52', 'ItemName2', '51'),('C45', 'ItemName3', '3'),('A54', 'ItemName1', '15'), ('G22', 'ItemName5', '78')]
d = collections.defaultdict(int)
for a,b,c in L:
d[a,b] += int(c)
newlist = [(a,b,c) for (a,b),c in d.items()]
результат:
>>> newlist
[('B52', 'ItemName2', 51),
('C45', 'ItemName3', 3),
('A54', 'ItemName1', 33),
('G22', 'ItemName5', 78)]
>>>
сложность равна O(n)
Обратите внимание, что ваши исходные данные, кажется, содержат конечные / ведущие пробелы.Нет проблем с их удалением при создании нового словаря (иначе группировка не будет работать), например:
d[a,b.strip()] += int(c)