python比较字典

时间:2010-09-07 20:10:16

标签: python dictionary

级别:初学者

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

5 个答案:

答案 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