>>> from toytable import Table
>>> p = Table([('Owner Id', int), 'Pokemon', ('Level', int)])
>>> p.extend([
... [1, 'Pikachu', 18],
... [1, 'Bulbasaur', 22],
... [1, 'Charmander', 12],
... [3, 'Togepi', 5],
... [1, 'Starmie', 44],
... [9, 'Mew', 99],
... ])
>>> print p
| Owner Id (int) | Pokemon | Level (int) |
| 1 | Pikachu | 18 |
| 1 | Bulbasaur | 22 |
| 1 | Charmander | 12 |
| 3 | Togepi | 5 |
| 1 | Starmie | 44 |
| 9 | Mew | 99 |
>>> o = Table([('Owner Id', int), ('Name', str)])
>>> o.append([1, 'Ash Ketchum'])
>>> o.append([2, 'Brock'])
>>> o.append([3, 'Misty'])
>>> print o
| Owner Id (int) | Name (str) |
| 1 | Ash Ketchum |
| 2 | Brock |
| 3 | Misty |
>>> j = p.left_join(
... keys=('Owner Id',),
... other = o
... )
>>> print j
| Owner Id (int) | Pokemon | Level (int) | Name (str) |
| 1 | Pikachu | 18 | Ash Ketchum |
| 1 | Bulbasaur | 22 | Ash Ketchum |
| 1 | Charmander | 12 | Ash Ketchum |
| 3 | Togepi | 5 | Misty |
| 1 | Starmie | 44 | Ash Ketchum |
| 9 | Mew | 99 | None |
>>> j2 = j.project('Pokemon', 'Level', 'Name')
>>> print j2
| Pokemon | Level (int) | Name (str) |
| Pikachu | 18 | Ash Ketchum |
| Bulbasaur | 22 | Ash Ketchum |
| Charmander | 12 | Ash Ketchum |
| Togepi | 5 | Misty |
| Starmie | 44 | Ash Ketchum |
| Mew | 99 | None |
>>> restricted = j2.restrict(['Name'], lambda n: n == 'Ash Ketchum')
>>> print restricted
| Pokemon | Level (int) | Name (str) |
| Pikachu | 18 | Ash Ketchum |
| Bulbasaur | 22 | Ash Ketchum |
| Charmander | 12 | Ash Ketchum |
| Starmie | 44 | Ash Ketchum |
>>> sliced = j2[1:-1]
>>> print sliced
| Pokemon | Level (int) | Name (str) |
| Bulbasaur | 22 | Ash Ketchum |
| Charmander | 12 | Ash Ketchum |
| Togepi | 5 | Misty |
| Starmie | 44 | Ash Ketchum |
Tables can be copied - that flattens their internal structure and can result in improved performance:
>>> j3 = j2.copy()
Flattened Tables (but currently not DerivedTables) can be indexed. Indexes can be used to quickly look up rows by part of their value. Indexes eliminate the need for time-consuming search operations:
>>> i = j3.add_index(('Pokemon',)).reindex()
>>> print i[('Pikachu', )]
('Pikachu', 18, 'Ash Ketchum')