En Fri, 15 Jun 2007 00:20:33 -0300, [EMAIL PROTECTED] escribió:
I searched for an hour and don't see a solution to this (i assume
somewhat common) problem.
I have a very large dictionary of lists:
d = {a:[1,2], b:[2,3], c:[3]}
and i want to reverse the associativity of the integers thusly:
inverse(d) makes {1:[a], 2:[a,b], 3:[b,c]}
my solution expands the original dict into two lists of keys and list
elements:
list1: [a,a,b,b,c]
list2: [1,2,2,3,3]
then recombines them with the reverse operation.
but this takes too much time and a lot of memory.
I wonder if anyone can point me to a more efficient solution?
py d = dict(a=[1,2], b=[2,3], c=[3])
py result = {}
py for k,v in d.iteritems():
... for item in v:
... result.setdefault(item, []).append(k)
...
py result
{1: ['a'], 2: ['a', 'b'], 3: ['c', 'b']}
py
You may use collections.defaultdict too - search some recent posts.
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list