Сумма и группа по значениям в списках Python? [Дубликат]

Ошибка Expecting member declaration существует, потому что вы написали оператор (вызов функции) внутри класса. В этой области ожидаются декларации (функции, внутренние классы).

Вы должны поместить свои утверждения внутри функций (а затем вызвать их откуда-то), чтобы они могли быть выполнены.

1
задан styvane 26 November 2015 в 03:20
поделиться

6 ответов

Используйте словарь:

>>> 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)]
6
ответ дан mshsayem 22 August 2018 в 07:22
поделиться

использовать набор:

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)]
0
ответ дан g0str1d3r 22 August 2018 в 07:22
поделиться

Похоже, все забыли о коллекциях . 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)]
3
ответ дан Mikhail Gerasimov 22 August 2018 в 07:22
поделиться

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})
3
ответ дан Padraic Cunningham 22 August 2018 в 07:22
поделиться

Если вы хотите сохранить порядок списка, я предлагаю это с помощью словаря.

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)
0
ответ дан Steven Summers 22 August 2018 в 07:22
поделиться
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()
1
ответ дан W. Steve 22 August 2018 в 07:22
поделиться
  • 1
    Чтобы добавить к этому ответу, если печать нежелательна, то list(sum.items()) выполнит трюк. (sum.items() не является списком.) – El'endia Starman 26 November 2015 в 03:01
Другие вопросы по тегам:

Похожие вопросы: