[Tutor] Unique Items in Lists

Bill Mill bill.mill at gmail.com
Thu Jan 27 17:44:02 CET 2005


Srinivas,

You can't sort a string, since it's immutable. You can, however, sort
a list. To sort your table by the third element, you can do something
like this:

>>> table = (("apple", "fruit", "denmark"),
... ("mummy", "antique", "egypt"),
... ("taj", "wonder", "india"),
... ("f-16", "fighter", "usa"))
>>> sorter = [(elt[2], elt) for elt in table]
>>> sorter.sort()
>>> tuple([elt[1] for elt in sorter])
(('apple', 'fruit', 'denmark'), 
('mummy', 'antique', 'egypt'), 
('taj', 'wonder', 'india'), 
('f-16', 'fighter', 'usa'))  

# I edited the table output edited for clarity

When you sort a list of tuples, the default is to sort the list by the
first element in the tuples. If you make a list where the element you
want to sort on is first in all of the tuples (see the 'sorter = ...'
line), then sort that list, then remove the element you added (the
'tuple([...])' line), you are left with a list which is ordered the
way you want it.

Peace
Bill Mill
bill.mill at gmail.com


On Thu, 27 Jan 2005 08:29:10 -0800 (PST), Srinivas Iyyer
<srini_iyyer_bio at yahoo.com> wrote:
> Dear Danny, thank you for ur help. But a basic
> question ?
> 
> In a table, more specifically a matrix 3X3,
> 
> Apple    Fruit    Denmark
> F-16     Fighter  USA
> Taj      Wonder   India
> Mummy    Antique  Egypt
> 
> IF I have to sort on country, it should be
> 
> Apple    Fruit    Denmark
> Mummy    Antique  Egypt
> Taj      Wonder   India
> F-16     Fighter  USA
> 
> How can I sort by binding Denmark to fruit and apple
> as a string. String does not support sort function.
> Sincerly I dont know how to sort to follow your
> suggestion. can you please help.. sorry for asking
> basic question.
> 
> thank you
> 
> 
> --- Danny Yoo <dyoo at hkn.eecs.berkeley.edu> wrote:
> 
> >
> >
> > On Wed, 26 Jan 2005, Srinivas Iyyer wrote:
> >
> > > I have a list with 4 columns and column1 elements
> > are unique.  I wanted
> > > to extract unique elements in column3 and and
> > place the other elements
> > > of the column along with unique elements in column
> > 4 as a tab delim
> > > text.
> > >
> > > Table:
> > >
> > > col1    col2    col3   col4
> > > A       Apple     5    Chennai
> > > B       Baby     11    Delhi
> > > I       Baby*     1    Delhi
> > > M       Dasheri+  5    Mumbai
> > > K       Apple     12   Copenhagen
> >
> >
> > [Meta: we seem to be getting a run of similar
> > questions this week. Scott
> > Melnyk also asked about grouping similar records
> > together:
> >
> http://mail.python.org/pipermail/tutor/2005-January/035185.html.]
> >
> >
> > Hi Srinivas,
> >
> > I see that you are trying to group records based on
> > some criterion.  You
> > may find the problem easier to do if you fist do a
> > sort on that criterion
> > column: that will make related records "clump"
> > together.
> >
> >
> > For your sample data above, if we sort against the
> > second column, the
> > records will end up in the following order:
> >
> > ###
> > A       Apple     5    Chennai
> > K       Apple     12   Copenhagen
> > B       Baby      11   Delhi
> > I       Baby      1    Delhi
> > M       Dasheri   5    Mumbai
> > ###
> >
> >
> > In this sorting approach, you can then run through
> > the sorted list in
> > order.  Since all the related elements should be
> > adjacent, grouping
> > related lines together should be much easier, and
> > you should be able to
> > produce the final output:
> >
> > ###
> > Apple     A,K     5,12    Chennai,Copenhagen
> > Baby      B,I     1,11    Delhi
> > Dasheri   M       5       Mumbai
> > ###
> >
> > without too much trouble.  You can do this problem
> > without dictionaries at
> > all, although you may find the dictionary approach a
> > little easier to
> > implement.
> >
> >
> >
> >
> > > A dictionary option does not work
> >
> > A dictionary approach is also very possible.  The
> > thing you may be stuck
> > on is trying to make a key associate with multiple
> > values.  Most examples
> > of dictionaries in tutorials use strings as both the
> > keys and values, but
> > dictionaries are more versatile: we can also make a
> > dictionary whose
> > values are lists.
> >
> >
> > For example, here is a small program that groups
> > words by their first
> > letters:
> >
> > ###
> > >>> def groupAlpha(words):
> > ...     groups = {}
> > ...     for w in words:
> > ...         firstLetter = w[0]
> > ...         if firstLetter not in groups:
> > ...             groups[firstLetter] = []
> > ...         groups[firstLetter].append(w)
> > ...     return groups
> > ...
> > >>> groupAlpha("this is a test of the emergency
> > broadcast system".split())
> > {'a': ['a'],
> >  'b': ['broadcast'],
> >  'e': ['emergency'],
> >  'i': ['is'],
> >  'o': ['of'],
> >  's': ['system'],
> >  't': ['this', 'test', 'the']}
> > ###
> >
> >
> > If you have more questions, please feel free to ask.
> >
> >
> 
> __________________________________ 
> Do you Yahoo!?
> Meet the all-new My Yahoo! - Try it today!
> http://my.yahoo.com
> 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list