<p>我尝试了下面的代码,它成功了。
我在这里所做的是找到存在于b中而不存在于a(添加列表)中的dict。然后删除a中存在但不在b中的dict(已删除列表)。由于a和b中的“user2”不完全相同(更新),因此“user2”的数据将出现在添加和删除列表中,因此在下一步中,我找到了添加和删除列表中的用户名列表,然后从添加和删除列表中删除了dict,该列表中的用户名出现在更新的用户名列表中</p>
<pre><code>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}
]
added = [i for i in b if i not in a]
removed = [i for i in a if i not in b]
unchanged = [i for i in a if i in b]
updated_usernames = [i
for i in list(i['username'] for i in added)
if i in list(i['username'] for i in removed)]
updated = []
for i in added:
if i['username'] in updated_usernames:
added.remove(i)
updated.append(i)
for i in removed:
if i['username'] in updated_usernames:
removed.remove(i)
difference_between_a_and_b = {'added': added,
'removed': removed,
'updated': updated,
'unchanged': unchanged
}
print(difference_between_a_and_b)
</code></pre>
<p>我得到的输出
<a href="https://i.stack.imgur.com/d19rW.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/d19rW.png" alt="enter image description here"/></a></p>