在python字典中汇总一个相应的列表元素

时间:2017-05-28 17:09:39

标签: python list dictionary

我有一个任意数量的等长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']}

2 个答案:

答案 0 :(得分:1)

使用以下方法:

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 :(得分:1)

如果输入符合您的说明,则以下情况有效:

> 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']
}