繁体   English   中英

计算字典列表之间的差异,使用新键和旧值返回字典

[英]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中引入了字典的语法,在之前(不包括3.5) 支持该语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM