slice notation as values?

Duncan Booth duncan.booth at invalid.invalid
Fri Dec 9 07:34:56 EST 2005


Antoon Pardon wrote:

> Will it ever be possible to write things like:
> 
>   a = 4:9
>   for key, value in tree.items('alfa.': 'beta.'):

The first of these works fine, except you need to use the correct syntax:

>>> a = slice(4,9)
>>> range(10)[a]
[4, 5, 6, 7, 8]
>>> 

The second also works fine, provide tree is a type which supports it and 
you rewrite the call as tree.items(slice('alfa','beta.')) or perhaps 
tree['alfa':'beta.'].items(). To support slicing directly on a dictionary 
you could do:

>>> class sliceable(dict):
    def __getitem__(self, item):
        if isinstance(item, slice):
	    return self.__class__((k,v) for (k,v) in self.iteritems()
                if item.start <= k < item.stop)
        return dict.__getitem__(self, item)

>>> d = sliceable({'alpha': 1, 'aaa': 2, 'beta': 3, 'bee': 4 })
>>> d['alpha':'beta']
{'alpha': 1, 'bee': 4}
>>> d['alpha':'beta.']
{'alpha': 1, 'beta': 3, 'bee': 4}
>>> for key, value in d['alpha':'beta.'].items():
	print key, value

	
alpha 1
beta 3
bee 4

It seems unlikely that this will make it into the builtin dict type, but 
you never know.



More information about the Python-list mailing list