File indexing completed on 2024-04-06 12:23:30
0001
0002
0003
0004 class diclist( list ):
0005 '''list with an internal dictionary for indexing,
0006 allowing to keep dictionary elements ordered.
0007 keys can be everything except an integer.
0008 '''
0009
0010 def __init__(self):
0011 super( diclist, self).__init__()
0012
0013 self.dico = {}
0014
0015 def add( self, key, value ):
0016 if isinstance(key, (int, long)):
0017 raise ValueError("key cannot be an integer")
0018 if key in self.dico:
0019 raise ValueError("key '{key}' already exists".format(key=key) )
0020 self.dico[key] = len(self)
0021 self.append(value)
0022
0023 def __getitem__(self, index):
0024 '''index can be a dictionary key, or an integer specifying
0025 the rank of the value to be accessed
0026 '''
0027 try:
0028
0029 return super(diclist, self).__getitem__(index)
0030 except (TypeError, ValueError):
0031
0032
0033
0034 return super(diclist, self).__getitem__( self.dico[index] )
0035
0036 def __setitem__(self, index, value):
0037 '''These functions are quite risky...'''
0038 try:
0039 return super(diclist, self).__setitem__(index, value)
0040 except TypeError as ValueError:
0041 return super(diclist, self).__setitem__( self.dico[index], value )
0042
0043
0044