python - 将两个列表与字典进行比较并使用 Python 打印出不在列表中的值?

标签 python list dictionary

我一直在尝试使用两个包含听写的列表。基本上我有以下两个列表:

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'}in listB 意味着在这种情况下输出将是:

{'name': 'ColorB', 'color': 'Blue'}

但是我没有发现任何与我的问题类似的问题,因为我在字典中有“逗号”。 (也许它不是一个正确的听写??)

如果能帮助我解决打印不在 listB 中的字典的问题,我将不胜感激。

最佳答案

您可以通过在循环中使用 inO(n^2) 复杂度解决此问题(如 this 答案),但您也可以将 listB 重建为一组 tuples 以将复杂度降低到 O(n)(您需要将字典转换为元组,以便可以将它们添加到集合):

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)

关于python - 将两个列表与字典进行比较并使用 Python 打印出不在列表中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886127/

相关文章:

python - 箱线图 : custom width in seaborn

python - 如何使用 Python 和 Plotly 创建不显示异常值的箱线图?

python - 如何在 Python 中保持列表静态?

python - 从对象列表创建动态级别嵌套字典?

c - 使用数组和双向链表存储书籍的数据结构

java - 如何使用简单的适配器和 ListView 创建自己的自定义行布局

python - 如何转换每个 key :value pair in a dictionary to flat rows in a 2D array?

c++ - 在C/C++中,链表只有头指针分配在栈中,其他节点分配在堆中。这可能会导致内存泄漏?

Python:从键:值对字符串创建嵌套字典

python - 我可以在 map() 函数中使用 range() 吗?