Leeds, Mark wrote:
I have a dictionary grp that has lists
for each element ( excuse my terminology if it's
incorrect).

So gname might be automobiles, finance, construction etc
and grp[gname] is a list and this list
has elements that are strings
such as ["AAA","BBB","AAA","CCC"]


Is there a quick way to loop through the grp dictionary and reduce the lists so that each only contains unique elements ?

Sure, several options, depending on exactly what you need.

The usual way to represent a collection of unique items is a set:

>>> group = ["AAA","BBB","AAA","CCC"]
>>> set(group)
set(['AAA', 'BBB', 'CCC'])
(Two caveats with this: 1) the items in the list must be 'hashable', 2) the set is unordered. If your items are not hashable (e.g., if your groups contain lists, then this problem is more complicated - and the approach described here won't work). If you need to preserve the order then see a recent thread "Removing duplicates from a list".


If you need an actual list rather than a set, pass the set back to the list constructor:
>>> list(set(group))
['AAA', 'BBB', 'CCC']
>>>
but note that the order is still unrelated to the order of your original list.


Note also that this is a different list from the one you started with:
 >>> group is list(set(group))
 False

If you want to 'reduce' the original list as you specified then you could use the slice operator to copy the contents of the new list back into the original one:
>>> oldgroup = group
>>> group[:] = list(set(group))
>>> oldgroup is group
True
>>>



To update your dictionary of groups, simply iterate over the dictionary and apply one of the above transformations to each value


For example, you can use:
 >>>
 >>> for k in d:
 ...     d[k][:] = list(set(d[k]))
 ...
 >>> d
 {1: ['AAA', 'BBB', 'CCC'], 2: ['AAA', 'BBB', 'CCC']}
 >>>


or, in Python 2.4 could use:

 >>> d.update((k, list(set(d[k]))) for k in d)
(The argument of d.update is a 'generator expression')

but note that this doesn't preserve the identity of the lists

HTH

Michael



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to