On Mar 28, 1:44 pm, <[EMAIL PROTECTED]> wrote: > Hi everyone. > > I'm trying to work with very simple data structures but I'm stuck in the very > first steps. If someone has the luxury of a few minutes and can give an > advice how to resolve this, I'll really appreciate it. > > 1- I have a list of tuples like this: > lista= [(162, 141, 3), (162, 141, 3), (162, 141, 3), (168, 141, 2), (168, > 141, 2), (168, 141, 2), (201, 141, 1), (213, 141, 1), (203, 141, 1), (562, > 142, 4), (562, 142, 4), (562, 142, 4), (568, 142, 2), (568, 142, 2), (568, > 142, 2), (501, 142, 1), (513, 142, 1), (503, 142, 1)] > and I want to end with a dict like this: > {141: {1: [203, 213, 201], 2: [168, ], 3: [162, ]}, 142: {1: [503, 513, 501], > 2: [568, ], 4: [562, ]}}
(snipped) I think you can use, with python 2.5, defaultdict for this. I only have access to 2.4.4 here, so my facsimile is: class defaultd(dict): def __getitem__(self, k): if k not in self: self[k] = defaultd() return dict.__getitem__(self, k) lista = [(162, 141, 3), (162, 141, 3), (162, 141, 3), (168, 141, 2), (168, 141, 2), (168, 141, 2), (201, 141, 1), (213, 141, 1), (203, 141, 1), (562, 142, 4), (562, 142, 4), (562, 142, 4), (568, 142, 2), (568, 142, 2), (568, 142, 2), (501, 142, 1), (513, 142, 1), (503, 142, 1)] dd = defaultd() for value, outerkey, innerkey in lista: li = dd[outerkey].setdefault(innerkey, []) if value not in li: li.insert(0, value) # or, li.append(value) if you want to reverse order print dd I happen to like the "autovivification" feature found in perl and was pleased to see defaultdict in python 2.5. OTOH, python programmers more experienced than I might see this and run away screaming. -- Hope this helps, Steven -- http://mail.python.org/mailman/listinfo/python-list