summaryrefslogtreecommitdiff
path: root/tablib/core.py
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2011-01-31 01:36:14 -0500
committerKenneth Reitz <me@kennethreitz.com>2011-01-31 01:36:14 -0500
commit08ed3093823c6c3fa3500a509d201e483e22c4f5 (patch)
treeef25c2f5969cfa88d4802243a588e753a2118834 /tablib/core.py
parent34415b89b858075323b7a2d034c06b57dd26bdc7 (diff)
parent140736ff332ff164f18821ec150488b1a2092898 (diff)
downloadtablib-08ed3093823c6c3fa3500a509d201e483e22c4f5.tar.gz
Merge branch 'release/0.9.3' into develop
Diffstat (limited to 'tablib/core.py')
-rw-r--r--tablib/core.py43
1 files changed, 41 insertions, 2 deletions
diff --git a/tablib/core.py b/tablib/core.py
index c7e9dd5..9d36970 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -10,13 +10,14 @@
"""
from copy import copy
+from operator import itemgetter
from tablib import formats
__title__ = 'tablib'
-__version__ = '0.9.2'
-__build__ = 0x000902
+__version__ = '0.9.3'
+__build__ = 0x000903
__author__ = 'Kenneth Reitz'
__license__ = 'MIT'
__copyright__ = 'Copyright 2011 Kenneth Reitz'
@@ -519,6 +520,7 @@ class Dataset(object):
else:
self._data = [Row([row]) for row in col]
+
def filter(self, tag):
"""Returns a new instance of the :class:`Dataset`, excluding any rows
that do not contain the given :ref:`tags <tags>`.
@@ -528,6 +530,43 @@ class Dataset(object):
return _dset
+
+ def sort(self, col, reverse=False):
+ """Sort a :class:`Dataset` by a specific column, given string (for
+ header) or integer (for column index). The order can be reversed by
+ setting ``reverse`` to ``True``.
+ Returns a new :class:`Dataset` instance where columns have been
+ sorted."""
+
+ if isinstance(col, basestring):
+
+ 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)
+
+ else:
+ if self.headers:
+ col = self.headers[col]
+
+ _sorted = sorted(self.dict, key=itemgetter(col), reverse=reverse)
+ _dset = Dataset(headers=self.headers)
+
+ for item in _sorted:
+ if self.headers:
+ row = [item[key] for key in self.headers]
+ else:
+ row = item
+ _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