2013-12-12 2 views
1

Я пытаюсь сравнить значения из 2 словарей в Python. Я хочу знать, существует ли значение из одного Словаря в любом другом словаре. Вот что я до сих пор. Если он существует, я хочу вернуть True, иначе False.Проверьте, существуют ли значения словаря в другом словаре в Python

Код, который у меня есть, близко, но не работает правильно. Я использую VS2012 с плагином Python

Я передаю оба словарных предмета в функции.

def NameExists(best_guess, line): 
    return all (line in best_guess.values() #Getting Generator Exit Error here on values 
     for value in line['full name']) 

Кроме того, я хочу посмотреть, есть ли дубликаты в самом лучшем случае.

def CheckDuplicates(best_guess, line): 
    if len(set(best_guess.values())) != len(best_guess): 
     return True 
    else: 
     return False 

ответ

1

Как ошибка о выходе генератора, я предполагаю, что вы используете Python 3. Икс. Итак, best_guess.values() - это генератор, который выхлопных газов для первого value in line['full name'], для которого матч не будет найден.

Кроме того, я предполагаю, что использование all неверно, если вы ищете любое значение (не уверены, из которого одна диктатура).

Вы можете использовать что-то подобное следующим образом, обеспечивая line является второй словарь:

def NameExists(best_guess, line): 
    vals = set(best_guess.values()) 
    return bool(set(line.values()).intersection(vals)) 
+0

Я получаю ошибку атрибута. ['Full name'] - это значение из словаря строки, и я хочу узнать, соответствуют ли какие-либо из этих элементов значения другим элементам в пределах всего словаря best_guess. – Airborne

+0

@Airborne обновлено с информацией из вашего комментария – alko

+0

Это отлично работает, никаких ошибок :) – Airborne

1

Синтаксис в NameExists кажется неправильным, вы не используете value и best_guess.values() возвращает итератор, поэтому in будет работать только один раз, если не превратить его в список или набор (вы используете Python 3.x, не так ли?). Я считаю, что это то, что вы имели в виду:

def NameExists(best_guess, line): 
    vals = set(best_guess.values()) 
    return all(value in vals for value in line['full name']) 

И функция CheckDuplicates можно записать в более короткий путь, как это:

def CheckDuplicates(best_guess, line): 
    return len(set(best_guess.values())) != len(best_guess) 
+0

Кажется, вы забыли LEN для первого набора в 'CheckDuplicates' – alko

+0

@alko вы правы. Я исправил это, спасибо! –

+0

Да, я использую Python 3.3. – Airborne

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