我有两个类似于以下的词典列表:
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}]]
}
说明:user4添加到b列表中,User3从b列表中删除,user2的值更新(is_admin字段),user1不变
我有一个选项可以循环浏览其中一个列表,并在其他列表中搜索每个“用户名”键。但这似乎不是一个有效的选择(在每个循环中搜索整个数组)
有没有有效的方法来解决这个问题
我尝试了下面的代码,它成功了。 我在这里所做的是找到存在于b中而不存在于a(添加列表)中的dict。然后删除a中存在但不在b中的dict(已删除列表)。由于a和b中的“user2”不完全相同(更新),因此“user2”的数据将出现在添加和删除列表中,因此在下一步中,我找到了添加和删除列表中的用户名列表,然后从添加和删除列表中删除了dict,该列表中的用户名出现在更新的用户名列表中
我得到的输出![enter image description here](https://i.stack.imgur.com/d19rW.png)
你需要确定地循环浏览列表。为了提高效率,可以从前两个列表(或其副本)中删除选中的元素,并在发现要处理的元素后中断嵌套循环。我认为这将大大提高效率
示例(伪代码):
相关问题 更多 >
编程相关推荐