PYTHON:处理KeyError

问题描述

我正在尝试解决Python中的问题(检查字符串st是否是字谜):

算法: 要检查t是否为s的重排,我们可以计算两个字符串中每个字母的出现次数并进行比较。由于st都只包含来自a-z的字母,因此,大小为26的简单计数器table就足够了。

我们可以为s中的每个字母增加计数器,并为t中的每个字母减少计数器,然后检查计数器是否回到零。

代码

class Solution:
    def isAnagram(self,s: str,t: str) -> bool:
        
        if len(s) != len(t): 
            return False
        
        table = {} 
        
        for i in range(len(s)):
            table[s[i]] = table.get(table[s[i]],0) + 1
            
        for i in range(len(t)):
            table[t[i]] = table.get(table[s[i]],0) - 1
            if table[t[i]] < 0:
                return False
            
        return True

但是,我在第一个循环中遇到KeyError。为了解决这个问题,我尝试使用.get(),但仍然无法解决问题。

我遇到以下错误

enter image description here

感谢您的帮助。

解决方法

  • dict中寻找价值时,您会查询两次:table.get(table[s[i]],0)
  • [].get()是同义词,除了后者在为空时是安全的并返回默认值。
  • 这应该是您需要的循环。归功于@deadshot。
        for i in range(len(s)):
            table[s[i]] = table.get(s[i],0) + 1
            
        for i in range(len(t)):
            table[t[i]] = table.get(t[i],0) - 1
            if table[t[i]] < 0:
                return False