# How to pick out selected output components of a named tuple?

**URL:** <https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209>\
**Category:** General Usage\
**Created:** [June 12, 2023, 3:47am UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209 "2023-06-12T03:47:28Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [June 12, 2023, 3:47am UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/1 "2023-06-12T03:47:29Z")

</div>

I have a function `f() = (a=1, b=2, c=3) `, and I can pick out one of the returned components of the tuple as

```julia
julia> f().a   
1           

```

Can I select in this way `a` and at the same time `c`? In other words, I would like to get `a, c = f()???`.

---

<div class="post-metadata">

**Author:** ![DanielVandH](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danielvandh/32/31134_2.png) [@DanielVandH](https://discourse.julialang.org/u/DanielVandH)\
**Post date:** [June 12, 2023, 4:00am UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/2 "2023-06-12T04:00:31Z")

</div>

You could do `(; a, c) = f()`

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [June 12, 2023, 5:08am UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/3 "2023-06-12T05:08:45Z")

</div>

Ah, that is very good. Thanks!

---

<div class="post-metadata">

**Author:** ![gdalle](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gdalle/32/27854_2.png) [@gdalle](https://discourse.julialang.org/u/gdalle)\
**Post date:** [June 12, 2023, 5:19am UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/4 "2023-06-12T05:19:15Z")

</div>

Only works for Julia \geq 1.7 though

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [June 12, 2023, 2:04pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/5 "2023-06-12T14:04:04Z")

</div>

Actually, I realized I would really like to be able to collect the results in variables whose names are not the same as those in the named tuple. For example: `myvar = f().c`. But with an arbitrary multiple selection, `myv1, myv2 = f()...` (let us say, `a` and `c`).

Can this be done?

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [June 12, 2023, 2:41pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/6 "2023-06-12T14:41:32Z")

</div>

OK, found this:

```julia
julia> v1, v2 = f()[[:a, :c]]                                                                                                   
(a = 1, c = 3)                                                                                                                  
                                                                                                                                
julia> v1                                                                                                                       
1                                                                                                                               
                                                                                                                                
julia> v2                                                                                                                       
3     

```

Can this be made more succinct?

---

<div class="post-metadata">

**Author:** ![PeterSimon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petersimon/32/25193_2.png) [@PeterSimon](https://discourse.julialang.org/u/PeterSimon)\
**Post date:** [June 12, 2023, 5:47pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/7 "2023-06-12T17:47:22Z")

</div>

```julia
julia> f() = (; a=1, b=2, c=3, d=4)
f (generic function with 1 method)

julia> x, _, _, y = f()
(a = 1, b = 2, c = 3, d = 4)

julia> x
1

julia> y
4

```

---

<div class="post-metadata">

**Author:** ![rocco\_sprmnt21](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rocco_sprmnt21/32/20127_2.png) [@rocco\_sprmnt21](https://discourse.julialang.org/u/rocco_sprmnt21)\
**Post date:** [June 12, 2023, 7:21pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/8 "2023-06-12T19:21:26Z")

</div>

[here](https://discourse.julialang.org/t/unpacking-a-named-tuple-using-field-names-and-slurping/100035/5) there may be something close

---

<div class="post-metadata">

**Author:** ![Eben60](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/eben60/32/13475_2.png) [@Eben60](https://discourse.julialang.org/u/Eben60)\
**Post date:** [June 12, 2023, 7:29pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/9 "2023-06-12T19:29:23Z")

</div>

See also [Why are there all these strange stumbling blocks in Julia? - #67 by Eben60](https://discourse.julialang.org/t/why-are-there-all-these-strange-stumbling-blocks-in-julia/92644/67)

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [June 12, 2023, 7:58pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/10 "2023-06-12T19:58:01Z")

</div>

Nice! What I’m not so happy about is that one has to know the order in which the arguments have been returned.

---

<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:** [June 12, 2023, 8:53pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/11 "2023-06-12T20:53:35Z")

</div>

> [@PetrKryslUCSD](#):
>
> Can this be made more succinct?

How do you want it to look? There’s not all that much unsuccinctness to work with in the solution you found.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [June 12, 2023, 8:58pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/12 "2023-06-12T20:58:34Z")

</div>

If this is the best, I shall be content. 🙂

---

<div class="post-metadata">

**Author:** ![PeterSimon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petersimon/32/25193_2.png) [@PeterSimon](https://discourse.julialang.org/u/PeterSimon)\
**Post date:** [June 12, 2023, 11:28pm UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/13 "2023-06-12T23:28:47Z")

</div>

> [@GunnarFarneback](#):
>
> How do you want it to look? There’s not all that much unsuccinctness to work with in the solution you found.

Don’t blame @PetrKryslUCSD. Like all good Julians, he’s [greedy](https://julialang.org/blog/2012/02/why-we-created-julia/) 😀.

---

<div class="post-metadata">

**Author:** ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)\
**Post date:** [June 13, 2023, 1:50am UTC](https://discourse.julialang.org/t/how-to-pick-out-selected-output-components-of-a-named-tuple/100209/14 "2023-06-13T01:50:50Z")

</div>

> [@PetrKryslUCSD](#):
>
> `v1, v2 = f()[[:a, :c]] `

This looks good, could avoid allocating that array of symbols because named tuples support indexing with tuples of symbols `f()[(:a, :c)]`.
