# Merging two dictionaries with only keys in “b” that also exist in “a”

**URL:** <https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985>\
**Category:** General Usage\
**Tags:** dictionary\
**Created:** [August 25, 2021, 3:34pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985 "2021-08-25T15:34:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jan\_Dolinsky](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jan_dolinsky/32/31347_2.png) [@Jan\_Dolinsky](https://discourse.julialang.org/u/Jan_Dolinsky)\
**Post date:** [August 25, 2021, 3:34pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985/1 "2021-08-25T15:34:58Z")

</div>

Hello,

I would like to merge two dictionaries where I want to merge only keys in “b” that also exists in “a”. Is there a neat way of doing this?

Example:

```julia
a = Dict("foo" => 23, "bar" => 24)
b = Dict("bar" => 450, "unwanted1" => 23, "unwanted2" => 123)

```

should result in

```julia
Dict("foo" => 23, "bar" => 450)

```

Any hints appreciated.

Thanks!

---

<div class="post-metadata">

**Author:** ![SteffenPL](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/steffenpl/32/206270_2.png) [@SteffenPL](https://discourse.julialang.org/u/SteffenPL)\
**Post date:** [August 25, 2021, 3:49pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985/2 "2021-08-25T15:49:24Z")

</div>

I randomly was just programing the same, but for nestled Dicts.

```julia

function combine(A::Dict, B::Dict)
	C = Dict()
	for (k,v) in pairs(A)
		if k in keys(B)
			v2 = getindex(B, k)
			if isa(v,Dict) && isa(v2,Dict)
				C[k] = combine(v,v2)
			else
				C[k] = v2
			end
		else
			C[k] = v
		end
	end
	return C
end

a = Dict("foo" => 23, "bar" => 24)
b = Dict("bar" => 450, "unwanted1" => 23, "unwanted2" => 123)

combine(a,b) == Dict("foo" => 23, "bar" => 450)

```

For you problem, you could just use this one liner

```julia
Dict( k => (haskey(b,k) ? b[k] : v) for (k,v) in a)

```

(or `Dict( k => (haskey(b,k) ? b[k] : a[k]) for k in keys(a))`, which might be slower but easier to read.)

---

<div class="post-metadata">

**Author:** ![Jan\_Dolinsky](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jan_dolinsky/32/31347_2.png) [@Jan\_Dolinsky](https://discourse.julialang.org/u/Jan_Dolinsky)\
**Post date:** [August 25, 2021, 3:54pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985/3 "2021-08-25T15:54:44Z")

</div>

> [@SteffenPL](#):
>
> `Dict( k => (haskey(b,k) ? b[k] : v) for (k,v) in a)`

This one liner is pretty neat, thanks!

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [August 26, 2021, 2:27pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985/4 "2021-08-26T14:27:45Z")

</div>

FWIW, a less smart option but readable:

```julia
kᵢ = intersect(keys(a), keys(b))
merge(a, Dict(k => b[k] for k in kᵢ))

```

---

<div class="post-metadata">

**Author:** ![Jan\_Dolinsky](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jan_dolinsky/32/31347_2.png) [@Jan\_Dolinsky](https://discourse.julialang.org/u/Jan_Dolinsky)\
**Post date:** [August 26, 2021, 2:41pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985/5 "2021-08-26T14:41:39Z")

</div>

Thanks! Not too bad neither. It is interesting to see the use of intersect() here.

---

<div class="post-metadata">

**Author:** ![Mattriks](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mattriks/32/351_2.png) [@Mattriks](https://discourse.julialang.org/u/Mattriks)\
**Post date:** [August 26, 2021, 4:50pm UTC](https://discourse.julialang.org/t/merging-two-dictionaries-with-only-keys-in-b-that-also-exist-in-a/66985/6 "2021-08-26T16:50:01Z")

</div>

More condensed:

```julia
merge(a, filter(x->haskey(a,x.first), b))

```
