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

时间:2019-04-28 00:51:44

标签: 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中没有的内容。在我们的例子中,listB中没有{'name': 'ColorB', 'color': 'Blue'},这意味着输出为:

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

但是,由于在字典中有“逗号”,因此我没有发现与我的问题类似的东西。 (也许这不是字典的正确内容?)

对于解决打印出listB中没有的字典的问题,我将提供各种帮助。

3 个答案:

答案 0 :(得分:3)

您可以通过在循环中使用git init junk cd junk git remote add project /path/to/project git remote add tests /path/to/tests git remote update git filter-branch --index-filter ' mydate=`git show -s --date=raw --pretty=%ad $GIT_COMMIT` thetest=`git rev-list -1 --before="$mydate" --remotes=tests` [[ -n $thetest ]] && git read-tree --prefix= $thetest ' -- --remotes=project 来解决O(n^2)复杂性的问题(就像在this答案中一样),但是您也可以将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

答案 1 :(得分:2)

很简单。使用循环迭代listA中的每个元素,并使用 if语句将其与listB中的所有元素进行比较:

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'}]

for A in listA:
    if A not in listB:
        print(A)

输出:

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

答案 2 :(得分:1)

>>> 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'}]
>>> [item for item in listA if item not in listB]
[{'name': 'ColorB', 'color': 'Blue'}]
>>>