Nito Cesar
Nito Cesar

Reputation: 1

Sum elements in python list

Ho to sum this value in this list:

[{'name': 'Radio HF', **'quantidade': '1'**}, {'name': 'Radio HF', **'quantidade': '1'**}, {'name': 'chave fenda', 'quantidade': '2'}, {'name': 'Coletes salva-vidas', 'quantidade': '3'}]

example: if the [index] have same name I want to sum the value in "quantidade". How can I do this?

Upvotes: 0

Views: 93

Answers (2)

nico9T
nico9T

Reputation: 2706

I don't know the reason but the type of your 'quantidade' is string, so you have to cast it to int before doing the sum.

Code:

mylist = [{'name': 'Radio HF', 'quantidade': '1'}, 
           {'name': 'Radio HF', 'quantidade': '1'}, 
           {'name': 'chave fenda', 'quantidade': '2'}, 
           {'name': 'Coletes salva-vidas', 'quantidade': '3'}]

sums = {}

for x in mylist:
    sums[x['name']] = sums.get(x['name'],0) + int(x['quantidade'])

Output:

{'Radio HF': 2, 'chave fenda': 2, 'Coletes salva-vidas': 3}

Upvotes: 1

Guy
Guy

Reputation: 50809

Iterate over the dictionaries in the list and use a dictionary to sum the quantidade value by similar name.

lst = [{'name': 'Radio HF', 'quantidade': '1'},
       {'name': 'Radio HF', 'quantidade': '1'},
       {'name': 'chave fenda', 'quantidade': '2'},
       {'name': 'Coletes salva-vidas', 'quantidade': '3'}]

sums = {}
for d in lst:
    sums[d['name']] = sums.get(d['name'], 0) + int(d['quantidade'])

print(sums) # {'Radio HF': 2, 'chave fenda': 2, 'Coletes salva-vidas': 3}

Upvotes: 1

Related Questions