У меня есть список произвольного числа словарей Python равной длины с соответствующими наборами ключей, которые являются списками, например:

[{'Item 1':[5.25, 'Red', 'Large'], 'Item 2':[8.50, 'Blue', 'Small'], 'Item 3':[12.50, 'Tan', 'Medium']}, 
{'Item 1':[10.50, 'Red', 'Large'], 'Item 2':[14.25, 'Blue', 'Small'], 'Item 3':[17.25, 'Tan', 'Medium']}, 
{'Item 1':[12.25, 'Red', 'Large'], 'Item 2':[20.25, 'Blue', 'Small'], 'Item 3':[24.25, 'Tan', 'Medium']}]

Список атрибутов для каждого продукта одинаков, за исключением первого элемента, типа int или float.

Как получить один словарь с тем же набором ключей и таким же набором значений, но первый элемент в списке суммируется? Другими словами, я хочу вернуться:

{'Item 1':[28.00, 'Red', 'Large'], 'Item 2':[43.00, 'Blue', 'Small'], 'Item 3':[54.00, 'Tan', 'Medium']}
0
Jay N 28 Май 2017 в 20:09

2 ответа

Лучший ответ

Следующее работает, если ввод, как вы заявляете:

> lst = [
  {'Item 1':[5.25, 'Red', 'Large'], 'Item 2':[8.50, 'Blue', 'Small'], 'Item 3':[12.50, 'Tan', 'Medium']}, 
  {'Item 1':[10.50, 'Red', 'Large'], 'Item 2':[14.25, 'Blue', 'Small'], 'Item 3':[17.25, 'Tan', 'Medium']}, 
  {'Item 1':[12.25, 'Red', 'Large'], 'Item 2':[20.25, 'Blue', 'Small'], 'Item 3':[24.25, 'Tan', 'Medium']}
]

> {k: [sum(d[k][0] for d in lst)] + lst[0][k][1:] for k in lst[0]}
{
  'Item 3': [54.0, 'Tan', 'Medium'], 
  'Item 2': [43.0, 'Blue', 'Small'], 
  'Item 1': [28.0, 'Red', 'Large']
}
1
schwobaseggl 28 Май 2017 в 17:22

Используйте следующий подход:

result = {k: [sum(d[k][0] for d in price_list)] + v[1:] for k,v in price_list[0].items()}

print(result)

Выход:

{'Item 1': [28.0, 'Red', 'Large'], 'Item 3': [54.0, 'Tan', 'Medium'], 'Item 2': [43.0, 'Blue', 'Small']}
1
RomanPerekhrest 28 Май 2017 в 17:22