python - 将两个列表与 dicts 进行比较并使用 Python 打印出不在列表中的值?
问题描述
我一直在尝试使用两个包含 dicts 的列表。基本上我有两个列表如下:
listA = [{'name': 'ColorR', 'color': 'Red'}, {'name': 'ColorB', 'color': 'Blue'}, {'name': 'ColorP', 'color': 'Purple'}, {'name': 'ColorO', 'color': 'Orange'}, {'name': 'ColorW', 'color': 'White'}]
listB = [{'name': 'ColorR', 'color': 'Red'}, {'name': 'ColorP', 'color': 'Purple'}, {'name': 'ColorO', 'color': 'Orange'}, {'name': 'ColorW', 'color': 'White'}]
我在这里尝试实现的是,我想将 listA 与 listB 进行比较,并从 listA 中打印出 listB 中不存在的任何内容。在我们的例子中,我们{'name': 'ColorB', 'color': 'Blue'}
在 listB 中没有含义,在这种情况下输出将是:
{'name': 'ColorB', 'color': 'Blue'}
但是,由于字典中有“逗号”,我没有发现任何与我的问题相似的问题。(也许它不是正确的听写??)
我将不胜感激各种帮助来解决我打印出不在 listB 中的 dicts 的问题。
解决方案
您可以通过在循环中使用来解决这个O(n^2)
复杂的问题(就像在这个答案中一样),但您也可以重建为一组以降低复杂性(您需要将字典转换为元组,以便它们可以添加到 a 中):in
listB
tuples
O(n)
set
listA = [{'name': 'ColorR', 'color': 'Red'}, {'name': 'ColorB', 'color': 'Blue'}, {'name': 'ColorP', 'color': 'Purple'}, {'name': 'ColorO', 'color': 'Orange'}, {'name': 'ColorW', 'color': 'White'}]
listB = [{'name': 'ColorR', 'color': 'Red'}, {'name': 'ColorP', 'color': 'Purple'}, {'name': 'ColorO', 'color': 'Orange'}, {'name': 'ColorW', 'color': 'White'}]
listB = {tuple(x.items()) for x in listB}
difference = [A for A in listA if tuple(A.items()) not in listB]
结果:
>>> difference
[{'color': 'Blue', 'name': 'ColorB'}]
tuple(A.items()) not in listB
tuple
每次都必须构建一个,但在那个not in
操作之后O(1)
推荐阅读
- arrays - Python itertools.combinations:如何同时获取组合内组合数的索引
- spring-boot - 带有 Springboot 的 Swagger 3:无法推断基本 url
- python - 你如何调试pydoit?
- azure - 微软图形。异常 SubscriptionCountReached 已达到“1000”的限制
- javascript - 在构建应用程序时,Expo/React-Native 将什么捆绑在一起?
- java - 如何使用谷歌助手为我的应用测试 android 切片
- xamarin - Mapsui - 如何提供当前用户的位置和焦点地图?
- c# - Mvvm Wpf MaterialDesign 更新 ViewModel 从另一个 ViewModel(抽屉)
- c# - OverlapCircleAll优化
- android - 使用 Jetpack Navigation 的 BottomNavigationView 时如何构建 Android App?