# 49. Group Anagrams

#### Medium

***

Given an array of strings `strs`, group **the anagrams** together. You can return the answer in **any order**.

An **Anagram** is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

&#x20;

**Example 1:**

<pre><code>Input: strs = ["eat","tea","tan","ate","nat","bat"]
<strong>Output:
</strong> [["bat"],["nat","tan"],["ate","eat","tea"]]
</code></pre>

**Example 2:**

<pre><code>Input: strs = [""]
<strong>Output:
</strong> [[""]]
</code></pre>

**Example 3:**

<pre><code>Input: strs = ["a"]
<strong>Output:
</strong> [["a"]]
</code></pre>

&#x20;

**Constraints:**

* `1 <= strs.length <= 104`
* `0 <= strs[i].length <= 100`
* `strs[i]` consists of lowercase English letters.

```python
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        d = defaultdict(int)
        group = defaultdict(list)
        for string in strs:
            for char in list(string):
                d[char] += 1
            key = ""
            for k in sorted(d.keys()):
                key += k + str(d[k])
            group[key].append(string)
            d = defaultdict(int)
        result = []
        for key, value in group.items():
            result.append(value)
        return result
            
```
