如果声明在Dict

时间:2014-03-18 00:53:01

标签: python if-statement dictionary

尝试写word listhand并且仅由word中的字母组成的函数返回True。我可以检查list中是否 word = 'chayote' hand = {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 'o': 2} list = ['peach', 'chayote'] def ValidWord(word, hand, list): if word in list: for i in word: if i in hand: return True return False else: return False ValidWord(word, hand, list) ,但无法弄清楚如何迭代检查第二部分。以下错误地返回True:

{{1}}

4 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是使用collections.Counter,就像这样

from collections import Counter
def is_valid_word(word, hand, list):
    if word in my_list:
        return len(Counter(word) - Counter(hand)) == 0
    return False

my_list = ['peach', 'chayote']
hand = {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 'o': 2}

print is_valid_word("chayote", hand, my_list)
# False
print is_valid_word("peach", hand, my_list)
# False

答案 1 :(得分:1)

我认为您可以使用all来执行此操作,可能更简洁:

if all(i in hand for i in words):
    return True

如果计数很重要,请参阅@ thefourtheye的答案。

答案 2 :(得分:0)

您可以更改for循环中的返回值:

word = 'chayote'
word2 = 'peach'
hand = {'a': 1, 'c': 2, 'u': 2, 't': 2, 'y': 1, 'h': 1, 'z': 1, 'o': 2, 'e': 2} # I added 'e' so chayote is true and peach is false
list = ['peach', 'chayote']

def ValidWord(word, hand, list):
    if word in list:
        for i in word:
            if i not in hand:
                return False
        return True
    else:
        return False

print(ValidWord(word, hand, list))
print(ValidWord(word2, hand, list))

答案 3 :(得分:0)

如果计算事项扩大了Gnijuohz的解决方案:

def ValidWord(word,hand,list):
  return word in list and all(i in hand for i in word) and all(hand[key]>=word.count(key) for key in hand.keys())

如果字母中出现的字母多于值[hand],则返回False。 如果您希望手字典指定的单词中至少包含每个字母的数量,只需将其更改为hand[key]<=word.count(key)即可。 据我所知,最后一种方式相当于thefourtheye使用Counter

的解决方案