组字谜 Leetcode 问题 (python)

Group anagrams Leetcode question (python)

我正在看这个 leetcode 问题 Leetcode。我正在尝试了解提供的解决方案,即:

class Solution:
    def groupAnagrams(strs):
        ans = collections.defaultdict(list)
        for s in strs:
            count = [0] * 26
            for c in s:
                count[ord(c) - ord('a')] += 1
            ans[tuple(count)].append(s)
        return ans.values()

我知道我们正在创建一个字符计数元组作为键,并将与该元组匹配的单词作为值添加到映射中。

让我感到困惑的是这一行 ans[tuple(count)].append(s)。为什么不是 ans[tuple(count)]=s。追加是否向地图添加值?我以为地图没有 append() 方法?

任何人都可以澄清这一特定行吗? 谢谢

ans 是一个 defaultdict,如果键当前未映射到任何内容,它会创建一个新列表。因此,ans[tuple(sorted(s))] 在字典中查找已排序元组的当前值(应为列表)。如果没有,它会创建一个新的空列表并将其与密钥相关联。然后它将 s 附加到该值。 Dict 没有 append 方法,但值可能。

如果ans = collections.defaultdict(list)让你感到困惑,你可以这样写:

class Solution:
   # your question does not have `self`  "def groupAnagrams(strs):"
    def groupAnagrams(self,strs):
        # ans = collections.defaultdict(list)
        ans={}
        for s in strs:
            count = [0] * 26
            for c in s:
                count[ord(c) - ord('a')] += 1
            # defaultdict already sets this for us
            if tuple(count) not in ans:
                ans[tuple(count)]=[]            
            ans[tuple(count)].append(s)
        return ans.values()