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

时间:2015-07-30 18:42:05

标签: python list dictionary comparison

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

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

我想要做的是比较listOne和listTwo他们的' A'密钥,如果没有' A'两个列表中的键,脚本打印出来。

有可能吗?

谢谢;

编辑:

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

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

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

我做不到:

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

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

我想做类似的事情:

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

但我不知道如何做到这一点......任何可能性?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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)

感谢您的支持:)

答案 2 :(得分:-1)

是的,有可能。

不,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