计算listofdicts之间的差异,返回带有新键和旧值的dict

2024-10-02 20:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出两个词典列表之间的区别。你知道吗

我使用的是python3.5,我想知道获取集之间差异的最佳方法。我知道set操作,但我不确定在我目前的情况下这是否是实现它们的最佳方法。你知道吗

以下是我现在拥有的:

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

最好的方法是什么?你知道吗


Tags: 方法nameidforitemcruisesetorig
1条回答
网友
1楼 · 发布于 2024-10-02 20:36:46

如果列表具有相同的顺序(这意味着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中不支持。你知道吗

相关问题 更多 >