python - 一键比较两个字典列表

python - Comparing two list of dictionaries by one key

我有两个这样的字典列表:

listOne = [{'A':'a','B':'b','C':'c'},{'A':'aa','B':'bb','C':'cc'},{'A':'aaa','B':'bbb','C':'ccc'}]
listTwo = [{'A':'a','B':'b'},{'A':'aa','B':'bb'},{'A':'aaa','B':'bbb'},{'A':'aaaa','B':'bbbb'}]

我想做的是通过 'A' 键比较 listOne 和 listTwo,如果两个列表中都没有带有 'A' 键的字典,脚本会打印它。

可能吗?

谢谢;

编辑:

好的,对不起,问题不清楚,所以:

我有两个不同大小的字典列表,listTwo 中的字典与 listOne 中的某些字典具有相同的键和相同的值,但它们多了一个键。

我需要做的是打印不在listTwo中的字典。

我做不到:

for i in listOne:
    if i not in listTwo:
        print(i)

因为当然在 listTwo 中字典还有一个元素,所以我不知道如何只比较这些字典的两个键值...

我想做这样的事情:

for i in listOne:
    if i['A'] not in listTwo.elementsKey['A']:
        print(i)

但我不知道该怎么做...有什么可能性吗?

def checkList(lst):
    for item in lst:
        if "A" not in item.keys():
            print item
checkList(listOne)
checkList(listTwo)

是的,这是可能的。

不,SO 不是人们为您编写代码的地方。

但为了友善,(并且缺乏对此发表评论的能力),请尝试以下内容:

 from itertools import chain
 keysA = set(chain.from_iterable([d.keys() for d in listOne]))
 keysB = set(chain.from_iterable([d.keys() for d in listTwo]))
 if 'A' not in keysA and 'A' not in keysB:
      print "'A' not in both lists"
 else:
      doyourcomparehere

好的,我想出了解决方法(以一种非常非常丑陋的方式):

listOne = [{'A':'a','B':'b','C':'c'},{'A':'aa','B':'bb','C':'cc'},{'A':'aaa','B':'bbb','C':'ccc'}]
listTwo = [{'A':'a','B':'b'},{'A':'aa','B':'bb'},{'A':'aaa','B':'bbb'},{'A':'aaaa','B':'bbbb'}]

listValues = []

for i in listOne:
    listValues.append(i['A'])
for i in listTwo:
    if i['A'] not in listValues:
        print(i)

感谢您的支持:)