Added reversedict and updated get_dentifiers and get_indices
This commit is contained in:
parent
677d368b60
commit
bbd525bed0
|
@ -91,7 +91,7 @@ class Dataset:
|
||||||
def _set_identifiers(self,identifiers,all_dims):
|
def _set_identifiers(self,identifiers,all_dims):
|
||||||
"""Creates internal mapping of identifiers structure."""
|
"""Creates internal mapping of identifiers structure."""
|
||||||
for dim,ids in identifiers:
|
for dim,ids in identifiers:
|
||||||
pos_map={}
|
pos_map = ReverseDict()
|
||||||
if dim not in self._dims:
|
if dim not in self._dims:
|
||||||
self._dims.append(dim)
|
self._dims.append(dim)
|
||||||
all_dims.add(dim)
|
all_dims.add(dim)
|
||||||
|
@ -139,10 +139,10 @@ class Dataset:
|
||||||
else:
|
else:
|
||||||
return [dim for dim in self]
|
return [dim for dim in self]
|
||||||
|
|
||||||
def get_identifiers(self, dim, indices=None,sorted=True):
|
def get_identifiers(self, dim, indices=None,sorted=False):
|
||||||
"""Returns identifiers along dim, sorted by position (index) is optional.
|
"""Returns identifiers along dim, sorted by position (index) is optional.
|
||||||
|
|
||||||
You can optionally provide a list of indices to get only the
|
You can optionally provide a list/ndarray of indices to get only the
|
||||||
identifiers of a given position.
|
identifiers of a given position.
|
||||||
|
|
||||||
Identifiers are the unique names (strings) for a variable in a given dim.
|
Identifiers are the unique names (strings) for a variable in a given dim.
|
||||||
|
@ -154,21 +154,16 @@ class Dataset:
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if sorted==True:
|
|
||||||
items = self._map[dim].items()
|
|
||||||
backitems = [ [v[1],v[0]] for v in items]
|
|
||||||
backitems.sort()
|
|
||||||
ids = [ backitems[i][1] for i in range(0,len(backitems))]
|
|
||||||
|
|
||||||
else:
|
|
||||||
ids = self._map[dim].keys()
|
|
||||||
|
|
||||||
if indices != None:
|
if indices != None:
|
||||||
ids = [ids[index] for index in indices]
|
ids = [self._map[dim].reverse[i] for i in indices]
|
||||||
|
else:
|
||||||
|
if sorted==True:
|
||||||
|
ids = [self._map[dim].reverse[i] for i in array_sort(self._map[dim].values())]
|
||||||
|
else:
|
||||||
|
ids = self._map[dim].keys()
|
||||||
|
|
||||||
return ids
|
return ids
|
||||||
|
|
||||||
|
|
||||||
def get_indices(self, dim, idents=None):
|
def get_indices(self, dim, idents=None):
|
||||||
"""Returns indices for identifiers along dimension.
|
"""Returns indices for identifiers along dimension.
|
||||||
|
|
||||||
|
@ -182,6 +177,7 @@ class Dataset:
|
||||||
else:
|
else:
|
||||||
index = [self._map[dim][key] for key in idents]
|
index = [self._map[dim][key] for key in idents]
|
||||||
return asarray(index)
|
return asarray(index)
|
||||||
|
|
||||||
|
|
||||||
class CategoryDataset(Dataset):
|
class CategoryDataset(Dataset):
|
||||||
"""The category dataset class.
|
"""The category dataset class.
|
||||||
|
@ -204,7 +200,7 @@ class CategoryDataset(Dataset):
|
||||||
.
|
.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,array,identifiers=None,name='A'):
|
def __init__(self,array,identifiers=None,name='C'):
|
||||||
Dataset.__init__(self,array,identifiers=identifiers,name=name)
|
Dataset.__init__(self,array,identifiers=identifiers,name=name)
|
||||||
self.has_dictlists = False
|
self.has_dictlists = False
|
||||||
|
|
||||||
|
@ -217,6 +213,7 @@ class CategoryDataset(Dataset):
|
||||||
self.has_dictlists=True
|
self.has_dictlists=True
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
class GraphDataset(Dataset):
|
class GraphDataset(Dataset):
|
||||||
"""The graph dataset class.
|
"""The graph dataset class.
|
||||||
|
|
||||||
|
@ -273,3 +270,19 @@ class Selection:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.current_selection={}
|
self.current_selection={}
|
||||||
|
|
||||||
|
class ReverseDict(dict):
|
||||||
|
"""
|
||||||
|
A dictionary which can lookup values by key, and keys by value.
|
||||||
|
All values and keys must be hashable, and unique.
|
||||||
|
|
||||||
|
d = ReverseDict((['a',1],['b',2]))
|
||||||
|
print d['a']
|
||||||
|
print d.reverse[1]
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kw):
|
||||||
|
dict.__init__(self, *args, **kw)
|
||||||
|
self.reverse = dict([[v,k] for k,v in self.items()])
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
dict.__setitem__(self, key, value)
|
||||||
|
self.reverse[value] = key
|
||||||
|
|
Reference in New Issue