# flatten out keys to map to values in kdb

**URL:** <https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228>\
**Category:** Community Support\
**Tags:** kdb-and-q\
**Created:** [September 2, 2016, 7:29pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228 "2016-09-02T19:29:00Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sam11](https://avatars.discourse-cdn.com/v4/letter/s/c6cbf5/32.png) [@Sam11](https://forum.kx.com/u/Sam11)\
**Post date:** [September 2, 2016, 7:29pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/1 "2016-09-02T19:29:00Z")

</div>

Consider following table in kdb:

```
`Keys `Values`A`B `V1`C`D`E `V2 

```

I want to flatten out Keys to map to corresponding value.that is, transform to:

```
`Key `Values`A `V1`B `V1`C `V2`D `V2`E `V2

```

Is there a succinct and easy way of doing this over looping over each entry using each?

---

<div class="post-metadata">

**Author:** ![Sam11](https://avatars.discourse-cdn.com/v4/letter/s/c6cbf5/32.png) [@Sam11](https://forum.kx.com/u/Sam11)\
**Post date:** [September 2, 2016, 7:31pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/2 "2016-09-02T19:31:00Z")

</div>

Alternatively,  
&nbsp;is there a way to query part of key?  
e.g. in the following table

```
`Keys `Values`A`B `V1`C`D`E `V2

```

Lookup for `A should return `V1

---

<div class="post-metadata">

**Author:** ![abcfoots1](https://avatars.discourse-cdn.com/v4/letter/a/96bed5/32.png) [@abcfoots1](https://forum.kx.com/u/abcfoots1)\
**Post date:** [September 2, 2016, 7:59pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/3 "2016-09-02T19:59:00Z")

</div>

q)g:((`Keys;`Values);(`A`B;`V1);(`C`D`E;`V2))  
q)(!). flip raze(,'/).'g,::()  
Keys| Values  
A&nbsp;&nbsp; | V1  
B&nbsp;&nbsp; | V1  
C&nbsp;&nbsp; | V2  
D&nbsp;&nbsp; | V2  
E&nbsp;&nbsp; | V2

---

<div class="post-metadata">

**Author:** ![Sam11](https://avatars.discourse-cdn.com/v4/letter/s/c6cbf5/32.png) [@Sam11](https://forum.kx.com/u/Sam11)\
**Post date:** [September 2, 2016, 8:13pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/4 "2016-09-02T20:13:00Z")

</div>

I’ve no idea what you did but it works.  
How do you make it work if g is table

```
`Keys `Values`A`B `V1`C`D`E `V2

```

---

<div class="post-metadata">

**Author:** ![kuentang](https://avatars.discourse-cdn.com/v4/letter/k/bc8723/32.png) [@kuentang](https://forum.kx.com/u/kuentang)\
**Post date:** [September 2, 2016, 8:34pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/5 "2016-09-02T20:34:00Z")

</div>

\<o:p\> \</o:p\>

Easy.\<o:p\>\</o:p\>

\<o:p\> \</o:p\>

ungroup flip `Keys`Values!flip((`A`B;`V1);(`C`D`E;`V2))\<o:p\>\</o:p\>

\<o:p\> \</o:p\>

Kim\<o:p\>\</o:p\>

\<o:p\> \</o:p\>

**Von:** [personal-kdbplus@googlegroups.com](mailto:personal-kdbplus@googlegroups.com) [[mailto:personal-kdbplus@googlegroups.com](mailto:personal-kdbplus@googlegroups.com)] **Im Auftrag von** Sam  
**Gesendet:** Freitag, 2. September 2016 21:13  
**An:** Kdb+ Personal Developers  
**Betreff:** [personal kdb+] Re: flatten out keys to map to values in kdb\<o:p\>\</o:p\>

\<o:p\> \</o:p\>

I’ve no idea what you did but it works.  
How do you make it work if g is table \<o:p\>\</o:p\>

```
`Keys `Values

`A`B `V1

`C`D`E `V2<o:p></o:p>

```

---

<div class="post-metadata">

**Author:** ![Sam11](https://avatars.discourse-cdn.com/v4/letter/s/c6cbf5/32.png) [@Sam11](https://forum.kx.com/u/Sam11)\
**Post date:** [September 4, 2016, 1:45am UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/6 "2016-09-04T01:45:00Z")

</div>

here is another challenge.  
what is values are also composite

## g:(k:((`A`B);(`C`D`E));v:((`V1`V2);(`V3`V4))) k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v

`A`B&nbsp;&nbsp; V1 V2  
`C`D`E V3 V4

ungroup doesn't work

---

<div class="post-metadata">

**Author:** ![Sam11](https://avatars.discourse-cdn.com/v4/letter/s/c6cbf5/32.png) [@Sam11](https://forum.kx.com/u/Sam11)\
**Post date:** [September 4, 2016, 2:08am UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/7 "2016-09-04T02:08:00Z")

</div>

## The result should be k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v

`A&nbsp;&nbsp; V1 V2 `B&nbsp;&nbsp; V1 V2  
`C&nbsp;&nbsp; V3 V4 `D&nbsp;&nbsp; V3 V4  
`E&nbsp;&nbsp; V3 V4

---

<div class="post-metadata">

**Author:** ![jim11](https://avatars.discourse-cdn.com/v4/letter/j/13edae/32.png) [@jim11](https://forum.kx.com/u/jim11)\
**Post date:** [September 4, 2016, 11:40am UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/8 "2016-09-04T11:40:00Z")

</div>

(k:raze g`k;v:raze (count each g`k)#'enlist each g`v)

---

<div class="post-metadata">

**Author:** ![rspa9428](https://avatars.discourse-cdn.com/v4/letter/r/ebca7d/32.png) [@rspa9428](https://forum.kx.com/u/rspa9428)\
**Post date:** [September 4, 2016, 4:54pm UTC](https://forum.kx.com/t/flatten-out-keys-to-map-to-values-in-kdb/11228/9 "2016-09-04T16:54:00Z")

</div>

Nice. Also “where” works nicely instead of "count each… # '…):

flip `k`v!(raze k;g[`v] where count each k:g`k)

or

select raze k,v:v where count each k from g

Cheers

Ryan

On Sunday, September 4, 2016 at 7:14:22 AM UTC-4, James Little wrote:

> (k:raze g`k;v:raze (count each g`k)#'enlist each g`v)
