DictTable
DictTable
is similar to Table
except that instead of being an AbstractArray
it is an AbstractDictionary
(from Dictionaries.jl).
The advantage of this is that rows can be indexed by a semantically-important key. A common case is that the first column of a table is a unique, primary-key column. When you construct a DictTable
in with arrays it will assume the first column is the primary key.
julia> using TypedTables
julia> t = DictTable(name = ["Alice", "Bob", "Charlie"], age = [25, 42, 37])
DictTable with 1 column and 3 rows:
name age
────────┬────
Alice │ 25
Bob │ 42
Charlie │ 37
As mentioned, rows can be indexed by the value of the primary key.
julia> t["Alice"]
(name = "Alice", age = 25)
The columns themselves are dictionaries that can be also be indexed by primary key.
julia> t.age
3-element Dictionaries.Dictionary{String, Int64}
"Alice" │ 25
"Bob" │ 42
"Charlie" │ 37
julia> t.age["Alice"]
25
With the design of Dictionaries.jl, these dictionaries are able to share Indices
so that this has very little overhead (even with many columns).
julia> keys(t.age) === t.name
true
Note that it is not required that the first column is the primary key. The DictTable
constructor can accept arbitrary dictionaries as columns (so long as the keys agree).