【发布时间】:2021-02-05 16:18:49
【问题描述】:
我有 2 个类似于以下的字典列表:
a = [
{'username': 'user1', 'is_admin': False},
{'username': 'user2', 'is_admin': True},
{'username': 'user3', 'is_admin': True}
]
b = [
{'username': 'user1', 'is_admin': False},
{'username': 'user2', 'is_admin': False},
{'username': 'user4', 'is_admin': True}
]
现在,我想比较这两个列表并获取如下数据:
difference between a and b =
{'added':
[{'username': 'user4', 'is_admin': True}],
'removed':
[{'username': 'user3', 'is_admin': True}],
'updated':
[{'username': 'user2', 'is_admin': False}],
'unchanged':
[{'username': 'user1', 'is_admin': False}]]
}
说明:用户4被添加到b列表中,用户3从b列表中移除并且用户2的值被更新(is_admin字段)并且用户1保持不变。
我可以选择遍历其中一个列表并在其他列表中搜索每个“用户名”键。但这似乎不是有效的选择(在每个循环中搜索所有数组)。
有没有有效的方法来解决这个问题?
【问题讨论】:
-
你检查this了吗?
-
是的,我试过这个。但这不适用于“更新”之类的情况,其中用户名“user2”的值已从 is_admin true 更改为 false。
-
这些是带有字典的列表。 Python != Javascript
-
@juanpa.arrivillaga 好的。
-
尝试
unittest.TestCase.assertListEqual方法。它提供了详细的差异。