# Empty Named Tuple

**URL:** <https://discourse.julialang.org/t/empty-named-tuple/36314>\
**Category:** General Usage\
**Created:** [March 21, 2020, 7:48pm UTC](https://discourse.julialang.org/t/empty-named-tuple/36314 "2020-03-21T19:48:51Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![alphasig329](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alphasig329/32/9794_2.png) [@alphasig329](https://discourse.julialang.org/u/alphasig329)\
**Post date:** [March 21, 2020, 7:48pm UTC](https://discourse.julialang.org/t/empty-named-tuple/36314/1 "2020-03-21T19:48:51Z")

</div>

Is it possible to initialize an empty NamedTuple with the appropriate keys and types for values? Can you then push future NamedTuples into this empty NamedTuple?

Thanks!

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [March 21, 2020, 10:01pm UTC](https://discourse.julialang.org/t/empty-named-tuple/36314/2 "2020-03-21T22:01:19Z")

</div>

> [@alphasig329](#):
>
> Is it possible to initialize an empty NamedTuple with the appropriate keys and types for values? Can you then push future NamedTuples into this empty NamedTuple?

Nope. part of the reasons named tuples are so useful is that they are immutable. You probably want to use a `Dict` if this is your use case. the package NamedTupleTools might have something you are interested in.

If you have a `Dict` `d` where all the `key`s are `Symbol`s, you can do

```julia
NamedTuple{Tuple(keys(d))}(Tuple(values(d)))

```

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [March 21, 2020, 10:24pm UTC](https://discourse.julialang.org/t/empty-named-tuple/36314/3 "2020-03-21T22:24:37Z")

</div>

You can’t mutate named tuples in-place. Some idioms that can be helpful here:

```julia
julia> a = NamedTuple()
NamedTuple()

julia> a = (;) # doesn't work in old Julia releases
NamedTuple()

julia> a = merge(a, (x=1,))
(x = 1,)

julia> a = (; a..., y=2)
(x = 1, y = 2)

julia> a = (; a..., :z => 3)
(x = 1, y = 2, z = 3)

julia> d = Dict(:aaa => 1, :bbb => 2, :ccc => 3);

julia> (; d...)
(bbb = 2, ccc = 3, aaa = 1)

```

---

<div class="post-metadata">

**Author:** ![alphasig329](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alphasig329/32/9794_2.png) [@alphasig329](https://discourse.julialang.org/u/alphasig329)\
**Post date:** [March 22, 2020, 3:24pm UTC](https://discourse.julialang.org/t/empty-named-tuple/36314/4 "2020-03-22T15:24:34Z")

</div>

Thanks. I am trying to learn how to utilize tuples for performance.

---

<div class="post-metadata">

**Author:** ![alphasig329](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alphasig329/32/9794_2.png) [@alphasig329](https://discourse.julialang.org/u/alphasig329)\
**Post date:** [March 22, 2020, 3:24pm UTC](https://discourse.julialang.org/t/empty-named-tuple/36314/5 "2020-03-22T15:24:49Z")

</div>

Thanks this was helpful.
