Support for sorting. Unit-tested.

This commit is contained in:
Luca Beltrame
2011-01-11 20:53:59 +01:00
parent 34415b89b8
commit f81dc41a57
2 changed files with 35 additions and 0 deletions
+20
View File
@@ -10,6 +10,7 @@
"""
from copy import copy
from operator import itemgetter
from tablib import formats
@@ -528,6 +529,25 @@ class Dataset(object):
return _dset
def sort(self, col, reverse=False):
"""Sort a :class:`Dataset` by a specific column. The order can be
reversed by setting ``reverse`` to ``True``. Requires headers to be
set. Returns a new :class:`Dataset` instance where columns have been
sorted."""
if not self.headers:
raise HeadersNeeded
_sorted = sorted(self.dict, key=itemgetter(col), reverse=reverse)
_dset = Dataset(headers=self.headers)
for item in _sorted:
row = [item[key] for key in self.headers]
_dset.append(row=row)
return _dset
def transpose(self):
"""Transpose a :class:`Dataset`, turning rows into columns and vice
versa, returning a new ``Dataset`` instance. The first row of the
+15
View File
@@ -425,7 +425,22 @@ class TablibTestCase(unittest.TestCase):
self.assertEqual(column_stacked[0],
("John", "Adams", 90, "John", "Adams", 90))
def test_sorting(self):
"""Sort columns."""
sorted_data = self.founders.sort(col="first_name")
first_row = sorted_data[0]
second_row = sorted_data[2]
third_row = sorted_data[1]
expected_first = self.founders[1]
expected_second = self.founders[2]
expected_third = self.founders[0]
self.assertEqual(first_row, expected_first)
self.assertEqual(second_row, expected_second)
self.assertEqual(third_row, expected_third)
def test_wipe(self):
"""Purge a dataset."""