Dict Copy & Compare
Hamilton, William
whamil1 at entergy.com
Tue May 1 09:14:53 EDT 2007
> -----Original Message-----
> From: Steven D'Aprano
> Sent: Monday, April 30, 2007 10:14 PM
> To: python-list at python.org
> Subject: RE: Dict Copy & Compare
>
> On Mon, 30 Apr 2007 12:50:58 -0500, Hamilton, William wrote:
>
> >> On quick question, how can I order a dict by the 'values' (not
keys)
> >> before
> >> looping? Is that possible?
> >>
> >
> > The easiest way I can think of is to create a new dict that's
reversed.
> >
> > reverseDict = {}
> > for key in dict1:
> > if dict1[key] not in reverseDict:
> > reverseDict[dict1[key]]=[key]
> > else:
> > reverseDict[dict1[key]].append(key)
> >
> > This gives you a dictionary that has the old dict's values as keys,
and
> > the old dict's keys as lists of values. You can then sort the keys
of
> > this dict and do what you want with it. Of course, the values in
dict1
> > have to be valid dictionary keys for this to work. If they aren't,
you
> > may be able to get away with converting them to strings.
>
>
> Oh man, maybe you need to re-think what you consider "easier".
>
> for value in dict1.itervalues()
> do_something_with(value)
This iterates through a list of values, with no information about the
keys at all. Not particularly applicable to the OP's needs.
> If you need the keys as well:
>
> for key, value in dict1.iteritems()
> do_something_with(key, value)
This iterates through values and keys, in no particular order. Still
not useful.
>
> If you need to process the values (say, sort them) first:
>
> pairs = list(dict1.iteritems()) # or dict1.items()
> pairs.sort()
> for key, value in pairs:
> do_something_with(key, value)
>
> I'll leave sorting by value instead of key as an exercise.
Hrmm. Maybe you missed the part where the OP was asking how to sort a
dict's contents by value? I'm pretty sure I quoted it.
My bit of code would be better if I had used iteritems() (I hadn't come
across that function yet). But, it's a solution, and more useful than
vague statements about what someone else needs to rethink and various
bits of code that don't solve the problem presented.
---
-Bill Hamilton
More information about the Python-list
mailing list