# Select multiple fields from a NamedTuple and create new NamedTuple

**URL:** https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231
**Category:** General Usage
**Tags:** question
**Created:** [August 29, 2018, 9:21am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231 "2018-08-29T09:21:25Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)
#### Post date: [August 29, 2018, 9:21am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/1 "2018-08-29T09:21:25Z")

</div>

Hello, I wonder how I can take several fields of an NamedTuple and generate a new NamedTuple from them.

I mean, the generator way is clear

```julia
A = (a = 1, b = 2, c = 3)
args = (:a, :b)
B = NamedTuple{args}(getfield(A, i) for i in args)

```

but I wonder if it can be done simpler.

Maybe even something like this `A.(a,b)` would be cool 😉

---

<div class="post-metadata">

### Author: ![saschatimme](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/saschatimme/32/10313_2.png) [@saschatimme](https://discourse.julialang.org/u/saschatimme)
#### Post date: [August 29, 2018, 9:32am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/2 "2018-08-29T09:32:10Z")

</div>

Maybe just this:

```julia
julia> A = (a = 1, b = 2, c = 3)
(a = 1, b = 2, c = 3)

julia> B = (a=A.a, b=A.b)
(a = 1, b = 2)

```

---

<div class="post-metadata">

### Author: ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)
#### Post date: [August 29, 2018, 9:44am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/3 "2018-08-29T09:44:27Z")

</div>

Yeah, for two or three fields it is shorter, but I have something around 10 fields in my original code and i also I have to specify the new names on my own and cannot use a Tuple of names.

Probably the generator version is the shortest is this case but perhaps someone knows a trick I am not aware of…

---

<div class="post-metadata">

### Author: ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)
#### Post date: [August 29, 2018, 10:00am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/4 "2018-08-29T10:00:04Z")

</div>

You can do

```julia
julia> Base.getindex(A::NamedTuple, args::Tuple) = NamedTuple{args}(getfield(A, i) for i in args)

julia> (a = 1, b = 2, c = 3)[(:a, :b)]
(a = 1, b = 2)

```

with the risk that base Julia at some future point introduces a conflicting method for that type signature.

---

<div class="post-metadata">

### Author: ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)
#### Post date: [August 29, 2018, 10:09am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/5 "2018-08-29T10:09:50Z")

</div>

Hey, that is cool. Why not just put it into Base, 😉

Thanks

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [August 29, 2018, 10:25am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/6 "2018-08-29T10:25:14Z")

</div>

> [@GunnarFarneback](#):
>
> the risk that base Julia at some future point introduces a conflicting method for that type signature

A preemptive PR could take care of that 😉

---

<div class="post-metadata">

### Author: ![saschatimme](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/saschatimme/32/10313_2.png) [@saschatimme](https://discourse.julialang.org/u/saschatimme)
#### Post date: [August 29, 2018, 10:35am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/7 "2018-08-29T10:35:52Z")

</div>

I looked into the implementation, and what you want is already [implemented in Base](https://github.com/JuliaLang/julia/blob/39e5742557cf56f26e1eccd28ab52d258ae19863/base/namedtuple.jl#L82):

```julia
julia> A
(a = 1, b = 2, c = 3)

julia> NamedTuple{(:a,:b)}(A)
(a = 1, b = 2)

```

---

<div class="post-metadata">

### Author: ![stakaz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stakaz/32/4740_2.png) [@stakaz](https://discourse.julialang.org/u/stakaz)
#### Post date: [August 29, 2018, 10:39am UTC](https://discourse.julialang.org/t/select-multiple-fields-from-a-namedtuple-and-create-new-namedtuple/14231/8 "2018-08-29T10:39:44Z")

</div>

Thanks, I thought, that I have tried this version but it seams, I was doing something wrong 😉 Works pretty well.
