Why creating a table from a tale results in a list of dictionaries?

May I please ask why creating a table from a table results in a “list” of dictionaries? 
( tab) where tab is a table(98h) results in a list of dictionaries? 

Thank you!

First, remember that a table itself is just a list of dictionaries.

q)0N!/:tab; col1col2!(a;1) col1col2!(b;2) col1col2!(`c;3)

So, when you tabulate a table, each entry in the original table (a dictionary) just becomes an entry in the new table column:

q)(tab) tab ----------------- col1col2!(a;1) col1col2!(b;2) col1col2!(`c;3) q)type (tab) 98h q)type each tab 99 99 99h q)type each(tab) 99 99 99h

 

A non-keyed table is just a list of dictionaries, flipped:

 

q)tab:(a:1 2 3;b:abc) tab a b --- 1 a 2 b 3 c q)ab!(1 2 3;abc) a| 1 2 3 b| a b c q)flip ab!(1 2 3;abc) a b --- 1 a 2 b 3 c q)tab~flip ab!(1 2 3;abc) 1b

 

What you are doing here is creating a new table, with a column called tab. This new column has a record for each row of the original table as a dictionary

q)tab:(a:1 2 3;b:abc) tab a b --- 1 a 2 b 3 c q)([]tab) tab ----------- ab!(1;a) ab!(2;b) ab!(3;c)

 You can also enlist the table to create a single record in the new table:

q)( enlist tab) tab -------------------- +ab!(1 2 3;ab`c)

If you want to create a table from a table, typically you would utilise query filtering to select a subset of columns, or joins from another table. What is your use case here?