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 - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor