On Sun, 26 Aug 2007, Eric Abrahamsen wrote:
> I wrote the stupid little script below for practice; it takes a text
> file with a list of surnames, and returns a dictionary where the keys
> are first letters of the names, and the values are lists of names
> grouped under their appropriate first-letter key, like so:
>
> {'A': ['Abercrombie'], 'B': ['Barnaby', 'Black', 'Biggles'], 'D':
> ['Douglas', 'Dawn', 'Diggle'], 'G': ['Granger', 'Gossen']}
>
> This is all well and good, but I want to sort the names in place, so
> that the names in each list are alphabetical. I tried slapping a sort
> () onto the dictionary list comprehension in every configuration I
> could think of.
You want sorted(), not sort():
>>> names = ['Abercrombie', 'Barnaby', 'Douglas', 'Granger', 'Black',
'Dawn','Gssen', 'Biggles', 'Diggle']
>>> from string import uppercase as letters
>>> mydict={}
>>> for letter in letters:
... mydict[letter] = sorted([name for name in names if name.startswith(letter))
...
>>> mydict
{'A': ['Abercrombie'], 'C': [], 'B': ['Barnaby', 'Biggles', 'Black'], 'E': [],
D': ['Dawn', 'Diggle', 'Douglas'], 'G': ['Gossen', 'Granger'], 'F': [],
'I': [] 'H': [], 'K': [], 'J': [], 'M': [], 'L': [], 'O': [], 'N': [],
'Q': [], 'P': [, 'S': [], 'R': [], 'U': [], 'T': [], 'W': [], 'V': [],
'Y': [], 'X': [], 'Z':]}
>>>
You can get rid of the empties...
>>> for key in mydict.keys(): #Note: not "for key in mydict:"
... if mydict[key] == []: del mydict[key]
...
>>> mydict
{'A': ['Abercrombie'], 'B': ['Barnaby', 'Biggles', 'Black'], 'D': ['Dawn',
'Diggle', 'Douglas'], 'G': ['Gossen', 'Granger']}
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor