cancel
Showing results for
Search instead for
Did you mean:

## Swap key-value in dictionary

New Contributor III

hi, how can I swap key and list of values using q? Thanks!

for example:

1 2 3!(4 5 3;6 7 3;4 1)

becomes

1 3 4 5 6 7!(enlist 3;1 2;1 3;enlist 1;enlist 2;enlist 2)

1 ACCEPTED SOLUTION
New Contributor III

This achieves what you're looking for.

``````q)d:1 2 3!(4 5 3;6 7 3;4 1)
q)r:1 3 4 5 6 7!(enlist 3;1 2;1 3;enlist 1;enlist 2;enlist 2)
q){a!key[x]where each flip value(a:asc distinct raze x)in/:x} d
1| ,3
3| 1 2
4| 1 3
5| ,1
6| ,2
7| ,2
q)r~{a!key[x]where each flip value(a:asc distinct raze x)in/:x}d
1b``````
3 REPLIES 3
New Contributor III

This achieves what you're looking for.

``````q)d:1 2 3!(4 5 3;6 7 3;4 1)
q)r:1 3 4 5 6 7!(enlist 3;1 2;1 3;enlist 1;enlist 2;enlist 2)
q){a!key[x]where each flip value(a:asc distinct raze x)in/:x} d
1| ,3
3| 1 2
4| 1 3
5| ,1
6| ,2
7| ,2
q)r~{a!key[x]where each flip value(a:asc distinct raze x)in/:x}d
1b``````
New Contributor III

Another method:

``````q){a!x a:asc key x:group(!). flip raze key[x],''value x}d
1| ,3
3| 1 2
4| 1 3
5| ,1
6| ,2
7| ,2``````

New Contributor III
``{key[x][i]!get[x]i:iasc key x:group(!). flip raze key[x],''get x}``

indexing into the keys instead of doing a lookup a smidge faster