Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Dictionary : items() (http://www.velocityreviews.com/forums/t666630-dictionary-items.html)

koranthala 01-22-2009 07:02 AM

Dictionary : items()
 
Hi,
Dictionary has the items method which returns the value as a list
of tuples.
I was wondering whether it would be a good idea to have an extra
parameter - sort - to allow the tuples to be sorted as the desire of
users.
Currently what I do is:

class SDict(dict):
def items(self, sort=None):
'''Returns list. Difference from basic dict in that it is
sortable'''
if not sort:
return super(SDict, self).items()
return sorted(self.iteritems(), key=sort)

Usage:
for a dictionary of strings sorted:
l = abcd.items(sort=lambda x:(x[1].lower(), x[0]))

Now what I wanted was to incorporate this in the basic dictionary
itself. Not only items(), but the methods similar to it - iteritems
etc all can also have this parameter.

Please let me know your views.
Is this a good enough idea to be added to the next version of Python?

Terry Reedy 01-22-2009 07:33 AM

Re: Dictionary : items()
 
koranthala wrote:
> Hi,
> Dictionary has the items method which returns the value as a list
> of tuples.
> I was wondering whether it would be a good idea to have an extra
> parameter - sort - to allow the tuples to be sorted as the desire of
> users.
> Currently what I do is:
>
> class SDict(dict):
> def items(self, sort=None):
> '''Returns list. Difference from basic dict in that it is
> sortable'''
> if not sort:
> return super(SDict, self).items()
> return sorted(self.iteritems(), key=sort)
>
> Usage:
> for a dictionary of strings sorted:
> l = abcd.items(sort=lambda x:(x[1].lower(), x[0]))
>
> Now what I wanted was to incorporate this in the basic dictionary
> itself. Not only items(), but the methods similar to it - iteritems
> etc all can also have this parameter.
>
> Please let me know your views.
> Is this a good enough idea to be added to the next version of Python?


In Python 3, the current .keys() returning a list and .iterkeys()
returning an iterator both disappear and are replaced by .keys()
returning an iterable set-like view of the dict. 'sorted(d.keys())' is
the way to convert the view into a sorted list. So your idea is obsolete.


Steven D'Aprano 01-22-2009 08:35 AM

Re: Dictionary : items()
 
On Wed, 21 Jan 2009 23:02:11 -0800, koranthala wrote:

> Hi,
> Dictionary has the items method which returns the value as a list
> of tuples.
> I was wondering whether it would be a good idea to have an extra
> parameter - sort - to allow the tuples to be sorted as the desire of
> users.
> Currently what I do is:
>
> class SDict(dict):
> def items(self, sort=None):
> '''Returns list. Difference from basic dict in that it is
> sortable'''
> if not sort:
> return super(SDict, self).items()
> return sorted(self.iteritems(), key=sort)
>
> Usage:
> for a dictionary of strings sorted:
> l = abcd.items(sort=lambda x:(x[1].lower(), x[0]))



That is better written as:

l = sorted(abcd.items(), key=lambda x:(x[1].lower(), x[0]))

where abcd is *any* kind of mapping with an items() method. It could be a
dict, a defaultdict, ordereddict, binarytree, or anything else the caller
needs.


> Now what I wanted was to incorporate this in the basic dictionary
> itself. Not only items(), but the methods similar to it - iteritems etc
> all can also have this parameter.
>
> Please let me know your views.
> Is this a good enough idea to be added to the next version of Python?



No.



--
Steven

Paul Rubin 01-22-2009 08:53 AM

Re: Dictionary : items()
 
Steven D'Aprano <steven@REMOVE.THIS.cybersource.com.au> writes:
> That is better written as:
> l = sorted(abcd.items(), key=lambda x:(x[1].lower(), x[0]))


In Python 2.x, I prefer the style

l = sorted(abcd.iteritems(), key=lambda (k,v): (v.lower(), k))

but Python 3.0 breaks the tuple unpacking per some PEP.

Benjamin 01-23-2009 03:02 AM

Re: Dictionary : items()
 
On Jan 22, 2:53*am, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:
> Steven D'Aprano <ste...@REMOVE.THIS.cybersource.com.au> writes:
> > That is better written as:
> > l = sorted(abcd.items(), key=lambda x:(x[1].lower(), x[0]))

>
> In Python 2.x, I prefer the style
>
> * l = sorted(abcd.iteritems(), key=lambda (k,v): (v.lower(), k))
>
> but Python 3.0 breaks the tuple unpacking per some PEP.


PEP 3113 if you really care.



All times are GMT. The time now is 09:46 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.