Am Tue, 20 Jan 2009 09:33:40 -0600
schrieb "Paul McGuire" <pt...@austin.rr.com>:

No need for a defaultdict, all dicts have a setdefault method that
works fine for this assign an empty dict/list as starting point problem:

wordlendict = {} 
for w in words:
    wordlendict.setdefault(len(w), []).append(w)
try:
    minlen, minlist = min(wordlendict.items())
except ValueError:
    minlen = 0
    minlist = []

Andreas

> from collections import defaultdict
> wordlendict = defaultdict(list)
> for w in words: 
>     wordlendict[len(w)].append(w)
> minlen = min(wordlendict.keys())
> minlist = wordlendict[minlen]
> print minlist
> 
> prints:
> ['he', 'me']
> 
> Now we are getting a more complete answer!
> 
> A second approach uses the groupby method of the itertools module in
> the stdlib.  groupby usually takes me several attempts to get
> everything right: the input must be sorted by the grouping feature,
> and then the results returned by groupby are in the form of an
> iterator that returns key-iterator tuples.  I need to go through some
> mental gymnastics to unwind the data to get the group I'm really
> interested in.  Here is a step-by-step code to use groupby:
> 
> from itertools import groupby
> grpsbylen = groupby(sorted(words,key=len),len)
> mingrp = grpsbylen.next()
> minlen = mingrp[0]
> minlist = list(mingrp[1])
> print minlist
> 
> The input list of words gets sorted, and then passed to groupby,
> which uses len as the grouping criteria (groupby is not inherently
> aware of how the input list was sorted, so len must be repeated).
> The first group tuple is pulled from the grpsbylen iterator using
> next().  The 0'th tuple element is the grouping value - in this case,
> it is the minimum length 2.  The 1'th tuple element is the group
> itself, given as an iterator.  Passing this to the list constructor
> gives us the list of all the 2-character words, which then gets
> printed: ['he', 'me']
> 
> Again, 'me' no longer gets left out.
> 
> Maybe this will get you some extra credit...
> 
> -- Paul 
> 
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to