Stack Overflow em Português Asked by MMelo on December 19, 2020
Sou iniciante, galera. Só para constar!
Estou tentando comparar os itens de uma lista com dicionários e se eles são iguais, somar esses itens. Acho que com um exemplo, a ideia fica mais clara:
dados = [
{"Codigo": 1, "Valor": 300.00,},
{"Codigo": 1, "Valor": 300.00,},
{"Codigo": 2, "Valor": 400.00,},
{"Codigo": 1, "Valor": 300.00,},
{"Codigo": 2, "Valor": 400.00,},
{"Codigo": 2, "Valor": 400.00,}
]
print(f'Número de itens: {len(dados)}')
for dado in dados:
print(f"{dado['Codigo']} = {dado['Valor']}")
A dúvida é: Se os valores de Codigo
são iguais – Como somar esses valores em um item e retornar somente o valor total somado?
Obrigado pela atenção!
Se o intuito for apenas pedagógico podes fazer um group by 'manual', e ir somando:
dados = [
{"Codigo": 1, "Valor": 300.00,},
{"Codigo": 1, "Valor": 300.00,},
{"Codigo": 2, "Valor": 400.00,},
{"Codigo": 1, "Valor": 300.00,},
{"Codigo": 2, "Valor": 400.00,},
{"Codigo": 2, "Valor": 400.00,}
]
dados_grouped = {}
for d in dados:
dados_grouped[d['Codigo']] = dados_grouped.get(d['Codigo'], 0) + d['Valor']
Output de dados_grouped:
{1: 900.0, 2: 1200.0}
import pandas as pd
df = pd.DataFrame(dados)
dados_grouped = df.groupby('Codigo', as_index=False).sum().to_dict('records')
Output de dados_grouped:
[{'Codigo': 1.0, 'Valor': 900.0}, {'Codigo': 2.0, 'Valor': 1200.0}]
Mas é importante sabermos que existem outras maneiras de fazer isto em python.
Correct answer by Miguel on December 19, 2020
Pare para pensar... você precisa percorrer uma lista e somar os valores de chaves ja encontradas, correto?
Então você precisa de alguma maneira, durante a iteração da lista somar os valores por chaves.
Então está claro que você precisa ter uma nova estrutura de dados para armazenar esses valores somados, durante a iteração.
Para isso você pode utilizar uma estrutura de chave/valor(hashmap) e após executar as somas, você le essa nova estrutura e transforma na nova lista com os valores somados.
Irei fazer em JS pois não conheço Python. E vejo que isso é falta de conhecimento em conceitos de estrutura de dados e programação básica do que uma dúvida sobre Python de fato
const lista = [
{"Codigo": 1, "Valor": 300.00},
{"Codigo": 1, "Valor": 300.00},
{"Codigo": 2, "Valor": 400.00},
{"Codigo": 1, "Valor": 300.00},
{"Codigo": 2, "Valor": 400.00},
{"Codigo": 2, "Valor": 400.00}
];
const tempHashMap = {};
for (item of lista) {
if (tempHashMap[item.Codigo] != null) {
tempHashMap[item.Codigo] = tempHashMap[item.Codigo] + item.Valor;
} else {
tempHashMap[item.Codigo] = item.Valor
}
}
const chavesDoHashMap = Object.keys(tempHashMap);
const novaLista = [];
for (chave of chavesDoHashMap) {
novaLista.push({
Codigo: chave,
Valor: tempHashMap[chave]
});
}
for (item of novaLista) {
console.log(`${item.Codigo} = ${item.Valor}`)
}
Answered by Giovane on December 19, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP