在dicts列表中合并相同键的值

Dau*_*eDK 6 python dictionary list python-2.7

我是python 2.7的新手,尽管在StackOverflow上进行了大量搜索,但仍无法弄清楚以下内容:

我有一个listdict的I wan't结合起来,当密钥相同,并添加特定值(在本例中'price').

输入:

[{'id1': 'a', 'price': '2', 'color': 'green'}, {'id1': 'b', 'price': '5', 'color': 'red'}, {'id1': 'a', 'price': '2', 'color': 'green'}] 
Run Code Online (Sandbox Code Playgroud)

预期:

[{'id1': 'a', 'price': '4', 'color': 'green'}, {'id1': 'b', 'price': '5', 'color': 'red'}]
Run Code Online (Sandbox Code Playgroud)

the*_*eye 4

与编辑前的问题相同的想法。

>>> data = [{'id1': 'a', 'price': '2', 'color': 'green'},
...         {'id1': 'b', 'price': '5', 'color': 'red'},
...         {'id1': 'a', 'price': '2', 'color': 'green'}]
Run Code Online (Sandbox Code Playgroud)

构造一个临时字典并在其中累积值

>>> temp = {}
>>> for d in data:
...     if d['id1'] not in temp:
...         temp[d['id1']] = {}
...     temp_d = temp[d['id1']]
...     temp_d['price'] = temp_d.get('price', 0) + int(d['price'])
...     temp_d.setdefault('colors', set()).add(d['color'])
... 
>>> temp
{'a': {'colors': {'green'}, 'price': 4}, 'b': {'colors': {'red'}, 'price': 5}}
Run Code Online (Sandbox Code Playgroud)

然后使用列表理解和字典理解,重建字典列表。

>>> [{'id1': k, 'price': v['price'], 'colors': v['colors']} for k, v in temp.items()]
[{'id1': 'a', 'colors': {'green'}, 'price': 4}, {'id1': 'b', 'colors': {'red'}, 'price': 5}]
Run Code Online (Sandbox Code Playgroud)
>>> data = [{'id1': 'a', 'price': '2'}, {'id1': 'b', 'price': '5'},
...         {'id1': 'a', 'price': '2'}]
Run Code Online (Sandbox Code Playgroud)

创建一个临时字典,我们可以根据它们的 id 累积价格总和,

>>> temp = {}
>>> for d in data:
...     temp[d['id1']] = temp.get(d['id1'], 0) + int(d['price'])
... 
>>> temp
{'a': 4, 'b': 5}
Run Code Online (Sandbox Code Playgroud)

d['id1']这里我们尝试获取from的值temp,如果没有找到,则返回0。然后我们添加price当前字典中的 并将结果存储回temp当前 id1 中。

然后用列表理解和字典理解重建字典列表,就像这样

>>> [{'id1': k, 'price': temp[k]} for k in temp]
[{'price': 4, 'id1': 'a'}, {'price': 5, 'id1': 'b'}]
Run Code Online (Sandbox Code Playgroud)