[Tutor] Help with lists
Danny Yoo
dyoo@hkn.eecs.berkeley.edu
Sat, 1 Dec 2001 16:05:46 -0800 (PST)
On Sat, 1 Dec 2001, Mike Yuen wrote:
> I've got a bit of a problem with lists that I need some help with.
>
> What I have is a pair of sub-elements (20 and A4) within each element such
> as:
> [20, A4] <-- We'll call this pair "big element"
>
> There are over 20000 such big elements. Not all of them are going to have
> a unique 1st sub-element (ie: the above big element has 20 as it's 1st
> sub element)
>
> What i'm trying to do is group them all the big elements with
> the same 1st subelements together.
> For example:
> [20, A4]
> [20, A2]
> [20, E]
>
> Will make the following big element:
> [20, A4, A2, E]
>
> Can someone help me out? I have to stick with lists as the structure
> meaning I can't use tuples or dictionaries.
Can we use dictionaries to help us construct the big elements? If so,
then your problem isn't too bad. Here's one idea: we can use a dictionary
to help group our lists by the first element:
###
def cluster(elements):
holder = {}
for e in elements:
first, second = e
holder[first] = holder.get(first, []) + [second]
return holder.items()
###
Let's see how this works:
###
>>> cluster(l)
[(17, ['seventeen']), (20, ['A4', 'A2', 'E'])]
###
It's not perfect yet, but you can bend cluster() a bit to make it solve
your problem.