Суммируйте значения на основе одинаковых ключей в dict и создайте массив
Здравствуйте ребята, у меня есть такие данные
[
{
'name': 'snow 7',
'count': 1,
'rows_processed': None,
'pipelines': 1
},
{
'name': 'snow 6',
'count': 1,
'rows_processed': None,
'pipelines': 1
},
{
'name': 'snow 6',
'count': 1,
'rows_processed': None,
'pipelines': 1
},
{
'name': 'snow 6',
'count': 2,
'rows_processed': None,
'pipelines': 2
},
{
'name': 'snow 5',
'count': 2,
'rows_processed': 4,
'pipelines': 2
},
{
'name': 'snow 4',
'count': 2,
'rows_processed': None,
'pipelines': 2
}]
и я хочу суммировать значения rows_processed
и pipelines
на основе ключа name
, например, для snow 6
pipelines
сумма будет равна 4 и так далее, в основном конечные данные должны выглядеть следующим образом.
{
"Rows Processed": [0, 0, 4, 0],
"Pipelines Processed": [1, 4, 2, 2]
}
как я могу сделать данные, как описано выше? вот что я сделал для этого
rows_processed = {}
pipeline_processed = {}
for batch in batches:
for label in batch.keys():
rows_processed[label] = rows_processed.get(batch['rows_processed'], 0) + batch['rows_processed'] if batch['rows_processed'] else 0
for batch in batches:
for label in batch.keys():
pipeline_processed[label] = pipeline_processed.get(batch['pipelines'], 0) + batch['pipelines'] if \
batch['pipelines'] else 0
Привет, ребята, я решил вышеуказанный вопрос, выполнив следующий код, однако я не уверен, правильный ли это подход или нет. Если у кого-то есть лучший подход, пожалуйста, дайте мне знать.
rows_processed = {}
pipeline_processed = {}
for batch in batches:
rows_processed[batch['name']] = rows_processed.get(batch['name'], 0) + batch['rows_processed'] if batch['rows_processed'] else 0
for batch in batches:
pipeline_processed[batch['name']] = pipeline_processed.get(batch['name'], 0) + batch['pipelines'] if batch['pipelines'] else 0
print(list(rows_processed.values()))
print(list(pipeline_processed.values()))
Один способ с использованием двухуровневого defaultdict
и Булевых операций:
>>> from collections import defaultdict
>>>
>>> d = defaultdict(lambda: defaultdict(int))
>>> for batch in batches:
... d['Rows Processed'][batch['name']] += batch['rows_processed'] or 0
... d['Pipelines Processed'][batch['name']] += batch['pipelines'] or 0
...
>>> list(d['Rows Processed'].values())
[0, 0, 4, 0]
>>> list(d['Pipelines Processed'].values())
[1, 4, 2, 2]