2016-10-17 3 views
2

Я пытаюсь сравнить все элементы одного словаря, чтобы убедиться, что они находятся в секунде с правильным номером. Я новичок в Python, поэтому я знаю, что есть что-то простое, я, вероятно, отсутствует, и я работаю над этой проблемой в течение нескольких часов, поэтому мой код, вероятно, очень уродлив и не прав. Вот пример того, что у меня до сих пор.Сравнение словаря Python 3.5

try:  
    for key in dict_one: 
     if dict_two.get(key, 0) == dict_one[key]: 
      del dict_one[key] 
      if dict_one[key] < 0 :     
       return False 
     else: 
      return True 
except KeyError: 
    pass 

Я попытался all(dict_two.get(key,0)), как хорошо, и это не сработало. Конечный результат должен проверить, что вы можете записать слово из dict_two, используя слова в dict_oneTrue, если вы можете, False, если вы не можете это сделать, если dict_two слово требует три Es, тогда dict_one должно иметь 3 Es или вернуть false. Или два Ns, если вы были орфографическим кроликом ex dict_one = {b: 1, u: 1, n:1, y:1, x: 3} и dict_two ={b: 1, u: 1. n: 2, y:1}False, потому что вам нужно 2 Ns в слове и dict_one имеет только один.

Я могу получить dict_two, чтобы правильно заполнить, когда я ввожу слово, и dict_one правильно вытягивает случайные числа и количества этих чисел. И я могу заставить их правильно сравнивать письма, включенные в каждый, я просто не могу получить его для получения правильного ответа True или False для количества необходимых букв. Я чувствую, что я близок к ответу, но потом просто делаю это хуже, когда я пробую новые вещи и копаю свою дыру глубже.

Спасибо!

+0

Не изменяйте объект, который вы повторяете. –

+0

Я использовал python tutor для диаграммы и увидел, что вы имеете в виду, что он переписывал его, чтобы он никогда не проверял это. Спасибо! Я улучшаю это, но все равно новичок и делаю много ошибок. – answrseeker

+0

Вы выполняете 'del dict_one [key]' в одной строке и в самой следующей строке, смотрите 'dict_one [key]'. Если 'dict_one' не является подклассом' defaultdict' или другим подклассом 'dict', реализующим' __missing__', это гарантирует, что вы будете бросать 'KeyError'; вы ищете то, от чего вы только что избавились. – ShadowRanger

ответ

2

Итак, вы хотите проверить, что каждая буква в dict2 имеет при отображении в dict1 наименьшее количество символов, отображаемых в dict2? Это достигается довольно легко.

def can_spell(dict1, dict2): 
    try: 
     return all(dict1[k] >= v for k, v in dict2.items()) 
    except KeyError: 
     return False 

Это получает каждый (ключ, значение) пара в dict2, а затем сравнивает v с отображением этого ключа в dict1. all возвращает True iff каждое выражение в понимании генератора истинно.

+0

Это должно быть 'return all (...)' – cdonts

+0

@cdonts. Единственное оправдание - час: p –

+0

Это было мое! Я как-то спустился по этому пути, используя – answrseeker

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