mirror of
https://github.com/kennethreitz/tablib.git
synced 2026-06-05 15:00:19 +00:00
Support for sorting. Unit-tested.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user