[英]Compute difference between list-of-dicts, return dict with new keys and old values
我想映射两个字典列表之间的差异。
我正在使用Python 3.5,并且想知道获得集合之间差异的最佳方法。 我知道集合操作,但是我不确定这是否是在当前情况下实现它们的最佳方法。
这是我现在所拥有的:
orig = set()
chng = set()
original = [{"name": "Tom Pety", "name_id": 1}, {"name": "Tom Cruz", "name_id": 2}]
changed = [{"name": "Tom Petty"}, {"name": "Tom Cruise"}]
for item in original:
orig.update(item.values())
for item in changed:
chng.update(item.values())
diffs = orig - chng
我当前的输出是{'Tom Pety', 1, 2, 'Tom Cruz'}
。
最终,我希望得到一个看起来像这样的结果,以便将更改后的值与其id关联:
[{"name": "Tom Petty", "name_id": 1}, {"name": "Tom Cruise", "name_id": 2}]
做这个的最好方式是什么?
如果列表具有相同的顺序 (这意味着changed
的第一项必须应用于original
的第一项,等等),那么我们可以使用zip
并发地遍历列表,并使用dict.update
函数同时更新这些。 喜欢:
for orig, chang in zip(original, changed):
orig.update(chang)
之后, orig
列表将包含带有字典的列表:
>>> original
[{'name': 'Tom Petty', 'name_id': 1}, {'name': 'Tom Cruise', 'name_id': 2}]
请注意,我们更新字典, 而不构建新字典。 如果我们需要创建新的,例如,可以使用以下方法:
new_list = [ {**orig, **chang} for orig, chang in zip(original, changed) ]
在PEP-448中引入了字典的语法,在python-2.x和python-3.x之前(不包括3.5) 不支持该语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.