Dictionary : items()

K

koranthala

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?
 
T

Terry Reedy

koranthala said:
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.
 
S

Steven D'Aprano

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.
 
P

Paul Rubin

Steven D'Aprano said:
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.
 
B

Benjamin

Steven D'Aprano said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top