Ошибка Expecting member declaration
существует, потому что вы написали оператор (вызов функции) внутри класса. В этой области ожидаются декларации (функции, внутренние классы).
Вы должны поместить свои утверждения внутри функций (а затем вызвать их откуда-то), чтобы они могли быть выполнены.
Используйте словарь:
>>> data = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
>>> result = {}
>>> for card,value in data:
total = result.get(card,0) + value
result[card] = total
>>> print result.items()
[('Visa': 1195.5), ('Rogers': 61.5)]
использовать набор:
li=[('Rogers', 10), ('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
s=set([i[0] for i in li])
x=[]
for i in s:
sum=0
for j in li:
if i == j[0]:
sum+=j[1]
x.append(sum)
final_list=zip(s,x)
print final_list
выход:
[('Visa', 1195.5), ('Rogers', 61.5)]
Похоже, все забыли о коллекциях . Counter :
from collections import Counter
c = Counter()
for card, val in lst:
c.update({card: val})
print(list(c.items()))
# [('Visa', 1195.5), ('Rogers', 61.5)]
A collections.defaultdict
был бы наиболее эффективным способом:
from collections import defaultdict
l= [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
d = defaultdict(float)
for k,v in l:
d[k] += v
Выход:
defaultdict(<class 'float'>, {'Visa': 1195.5, 'Rogers': 61.5})
Если вы хотите сохранить порядок списка, я предлагаю это с помощью словаря.
lst = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
lst2 = [(tup[0], sum([val for n, val in lst if n == tup[0]])) for tup in lst]
res = []
for tup in lst2:
if tup not in res:
res.append(tup)
print(res)
data = [('Visa', 980.5), ('Rogers', 61.5), ('Visa', 215.0)]
sum = {}
for item in data:
if not item[0] in sum:
sum[ item[0] ] = 0
sum[ item[0] ] += item[1]
print sum.items()
list(sum.items())
выполнит трюк. (sum.items()
не является списком.)
– El'endia Starman
26 November 2015 в 03:01