我一直在尝试两个包含字典的列表。基本上我有以下两个列表:
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中没有的字典的问题,我将提供各种帮助。
答案 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'}]
>>>