我正在做一个python项目,我想将一个字符串与一个键和值列表进行比较 - 如果所有键都与一个字符串匹配了一定次数,它应该返回True,例如 -
def compareTo(word, hand):
kal = False
for d in wordlists:
if d in word:
kal = True
return kal
它总是返回false我怎么能让它返回true?!?请帮忙!!!
所以,如果
word = "hammer"
和
hand = {'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}
值表示每个字母的频率 如果我插入的参数为true,我怎样才能使它返回true而不是false ...
comapreTo("hammer",{'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1})
应该返回True而不是False,而comapreTo("hammers",{'a': 1, 'h': 1, 'r': 1, 'd': 2, 'e': 1})
应该返回false而不是true!
答案 0 :(得分:1)
您只需使用Counter
来计算字母频率:
from collections import Counter
def compareTo(word, hand):
return Counter(word) == hand
例如,Counter("hammer")
为Counter({'m': 2, 'a': 1, 'h': 1, 'r': 1, 'e': 1})
;由于Counter
类似于字典,因此它将等于{'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}
。
Counter
内置于Python 2.7和Python 3.x.如果您需要在Python 2.6或更早版本中使用它,可以从此处获取它:http://code.activestate.com/recipes/576611/。
答案 1 :(得分:0)
这应该有效:
def compareTo(word, hand):
d = hand.copy()
for c in word:
d[c] = d.get(c, 0) - 1
if d[c] < 0:
return False
return True
word = "hammer"
hand = {'a': 1, 'h': 1, 'r': 1, 'm': 2, 'e': 1}
print compareTo(word, hand) # => True
print compareTo("hammers", hand) # => False
print compareTo("plum", {'f': 1, 'h': 1, 'k': 1, 'm': 1, 'l': 1, 'p': 1, 'u': 1, 'y': 1}) # => True