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)
感谢您的支持:)
我有两个这样的字典列表:
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)
感谢您的支持:)