# Multi of word in dict

**URL:** <https://discourse.julialang.org/t/multi-of-word-in-dict/44504>\
**Category:** New to Julia\
**Tags:** dictionary, splitapplycombine\
**Created:** [August 7, 2020, 3:07pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504 "2020-08-07T15:07:33Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Fuad\_Sami](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fuad_sami/32/16900_2.png) [@Fuad\_Sami](https://discourse.julialang.org/u/Fuad_Sami)\
**Post date:** [August 7, 2020, 3:07pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/1 "2020-08-07T15:07:33Z")

</div>

Hello all  
i need to do some thing like that in the dictionary

```julia
Dict(314 => ["ate","eat","tea"],311 => ["bat"],323 => ["nat","tan"])

```

iand this is my code

```julia
function groupAnagrams(str)
    **d = Dict{Int64,Array{String,1}}() # her i try to do Vector{String}[] , didn't work**
    
for i =1:length(str)
        count = 0
        for j=1:length(str[i])
            count +=Int(str[i][j])
        end
        if !haskey(d,count)
            d[count] = str[i]
        else 
            **#d[count] = push!(d[count],str[i]) , her i need to do some thing (append,push)..**
        end
    end
println(values(d))
   
end
str = ["eat", "tea", "tan", "ate", "nat", "bat"]
println(groupAnagrams(str))

```

and the output should be like that

```julia
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

```

any help ?

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [August 7, 2020, 3:56pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/2 "2020-08-07T15:56:43Z")

</div>

> [@Fuad\_Sami](#):
>
> ```julia
> **#d[count] = push!(d[count],str[i]) , her i need to do some thing (append,push)..**
> 
> ```

I’m guessing the line that goes here is:

```julia
push!(d[count], str[i])

```

and rather than `d[count] = str[1]`, you wanted `d[count] = [str[i]]`

---

<div class="post-metadata">

**Author:** ![Fuad\_Sami](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fuad_sami/32/16900_2.png) [@Fuad\_Sami](https://discourse.julialang.org/u/Fuad_Sami)\
**Post date:** [August 7, 2020, 4:15pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/3 "2020-08-07T16:15:31Z")

</div>

```julia
function groupAnagrams(str)
    d = Dict{Int64,Array{String,1}}()

    for i =1:length(str)
        count = 0
        for j=1:length(str[i])
            count +=Int(str[i][j])
        end
        if !haskey(d,count)
            d[count] = [str[i]]
            #println(d)
        else 
            push!(d[count], str[i])
        end
    end
#println(values(d))
for i in values(d)
    println(i)
end
   
end
str = ["eat", "tea", "tan", "ate", "nat", "bat"]
println(groupAnagrams(str))

```

this work fine  
thank you

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [August 7, 2020, 5:19pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/4 "2020-08-07T17:19:18Z")

</div>

Nice. You can also do:

```julia
function group_anagrams(strings)
    d = Dict{Int64, Vector{String}}()
    for str in strings
        count = sum(Int, collect(str))
        v = get!(d, count, Vector{String}[])
        push!(v, str)
    end
    d
end

```

---

<div class="post-metadata">

**Author:** ![Fuad\_Sami](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fuad_sami/32/16900_2.png) [@Fuad\_Sami](https://discourse.julialang.org/u/Fuad_Sami)\
**Post date:** [August 7, 2020, 7:00pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/5 "2020-08-07T19:00:35Z")

</div>

Wow, amazing solution !

---

<div class="post-metadata">

**Author:** ![yurivish](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yurivish/32/307_2.png) [@yurivish](https://discourse.julialang.org/u/yurivish)\
**Post date:** [August 7, 2020, 7:15pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/6 "2020-08-07T19:15:36Z")

</div>

And if you don’t mind using a package:

```julia
julia> using SplitApplyCombine

julia> A = ["eat", "tea", "tan", "ate", "nat", "bat"]
6-element Array{String,1}:
 "eat"
 "tea"
 "tan"
 "ate"
 "nat"
 "bat"

julia> group(s -> String(sort(collect(s))), A)
3-element Dictionaries.Dictionary{String,Array{String,1}}
 "aet" │ ["eat", "tea", "ate"]
 "ant" │ ["tan", "nat"]
 "abt" │ ["bat"]

```

This sorts each string and groups them together if the sorted string is the same, which happens if and only if two strings are anagrams of each other.

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [August 7, 2020, 8:45pm UTC](https://discourse.julialang.org/t/multi-of-word-in-dict/44504/7 "2020-08-07T20:45:58Z")

</div>

Much better method! I indeed forgot to note in my reply that both the original solution and mine don’t group only anagrams. See:

```julia
julia> group_anagrams(["eat", "dau"])
Dict{Int64,Array{String,1}} with 1 entry:
  314 => ["eat", "dau"]

```

Edit:  
Just wanted to mention this doesn’t necessarily require that package, only to change the calculation of the key:

```julia
function group_anagrams(strings)
    d = Dict{String, Vector{String}}()
    for str in strings
        key = String(sort(collect(str)))
        v = get!(d, key, Vector{String}[])
        push!(v, str)
    end
    d
end

julia> group_anagrams(["eat", "dau"])
Dict{String,Array{String,1}} with 2 entries:
  "aet" => ["eat"]
  "adu" => ["dau"]

```
