2015-07-30 2 views
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'}] 

, что я хочу сделать, это сравнить Listone и listTwo их клавишей «A» и если ISN 't словарь с ключом' A 'в обоих списках, сценарий печатает его.

Возможно ли это?

Thanks;

EDIT:

Хорошо, я извиняюсь, вопрос был неясен, так:

У меня есть два разновеликих список словарей, словари в listTwo имеют те же ключи и те же значения некоторые словари в listOne, но у них есть еще один ключ.

Что мне нужно сделать, это напечатать словари, которые не находятся в списке.

Я не могу сделать:

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) 

но я не понимаю, как это сделать ... Любые возможности?

+0

Ваш вопрос остается неясным. Вы хотите проверить, содержит ли каждый «список» хотя бы один словарь, содержащий ключ «A»? – TigerhawkT3

+0

напечатайте словари, значение «A» которых отсутствует в обоих списках – Giggiux

+0

Каким будет ваш ожидаемый результат в этом случае? – ILostMySpoon

ответ

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) 

Спасибо за вашу поддержку :)

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

Мой вопрос был неясен, извините :( – Giggiux

-1

Да, это возможно.

Нет, это не место, где люди пишут код для вас.

Но быть хорошим (и отсутствие возможности комментировать это вместо этого), попробовать что-то вроде:

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 
+0

Мне нужно сравнить значения двух наборов, извините, мой вопрос был неясным. – Giggiux

Смежные вопросы