级别:初学者
word= 'even'
dict2 = {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
我想知道单词是否完全由dict2中的字母组成 我的方法:
第1步:将单词转换为字典(dict1)
第二步:
for k in dict1.keys():
if k in dict2:
if dict1[k] != dict2[k]:
return False
return True
通过添加一个打印语句,我可以看到这只是太早结束 例如一旦满足第一个IF条件,循环就会退出,我将无法得到正确的答案。我认为这很容易,但谷歌和python doc没有任何好处 暗示所以我在这里尝试。
谢谢巴巴
更新
每个字母出现在单词中的次数需要小于或等于它在dict2中出现的次数。这样我保证这个词完全由dict2的元素组成。
for k in word.keys(): # word has ben converted to key already
if k not in hand:
return False
elif k in hand:
if word[k] > hand[k]:
return False
return True
答案 0 :(得分:4)
>>> word= 'even'
>>> dict2 = {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
>>> set(word).issubset(set(dict2.keys()))
True
答案 1 :(得分:1)
除非你需要别的东西,否则不要费心构建dict1。就这样做:
for c in word:
if c not in dict2:
return False
return True
当然,您也可以使用set
代替dict
来保留字母。
答案 2 :(得分:0)
在你的代码中,只需将“return True”移动到所有循环之外。也就是说,只有在循环完成而没有找到不匹配的值时才返回true。这是否真的是你想要的实际代码很难说,但移动“返回True”修复了你发布的代码中的逻辑错误。
答案 3 :(得分:0)
你只想在所有检查后返回true,所以在循环后粘贴它。这是对代码的直接修改:
for k in dict1.keys():
if k in dict2:
if dict1[k] != dict2[k]:
return False
return True
答案 4 :(得分:0)
>>> word = {'e':2, 'v':1, 'n':1}
>>> hand= {'i': 1, 'n': 1, 'e': 1, 'l': 2, 'v': 2}
>>> all(k in hand and v <= hand[k] for k,v in word.items())
False
现在看到真实案例
>>> hand['e']+=1
>>> all(k in hand and v <= hand[k] for k,v in word.items())
True