我无法理解这个问题:
我有一个清单:
[{'name' : 'Bob', 'Salary2014' : 2000}, {'name': 'Alice', 'Salary2014' : 1000}, {'name':'Bob', 'Salary2013' : 1500}]
我想在名字的基础上加入词典(这是唯一的)
[{'name' : 'Bob', 'Salary2014' : 2000, 'Salary2013' : 1500}, {'name': 'Alice', 'Salary2014' : 1000}]
我知道解决方案必须简单,并且可能涉及.update方法,但我只是不明白。
答案 0 :(得分:1)
使用新词典根据名称跟踪词典:
combined = {}
for d in yourlist:
combined.setdefault(d['name'], {}).update(d)
output = combined.values()
如果combined.setdefault()
不存在,{}
方法会将d['name']
设置为默认值,然后使用当前迭代更新字典。
如果您使用的是Python 3,请使用list(combined.values())
。
演示:
>>> yourlist = [{'name' : 'Bob', 'Salary2014' : 2000}, {'name': 'Alice', 'Salary2014' : 1000}, {'name':'Bob', 'Salary2013' : 1500}]
>>> combined = {}
>>> for d in yourlist:
... combined.setdefault(d['name'], {}).update(d)
...
>>> combined.values()
[{'Salary2013': 1500, 'name': 'Bob', 'Salary2014': 2000}, {'name': 'Alice', 'Salary2014': 1000}]
答案 1 :(得分:0)
另一种非常类似的方法是使用defaultdict:
from collections import defaultdict
inp = [{'name': 'Bob', 'Salary2014': 2000},
{'name': 'Alice', 'Salary2014': 1000},
{'name': 'Bob', 'Salary2013': 1500}]
out = defaultdict(dict)
for rec in inp:
out[rec['name']].update(rec)
print out.values()