On Wed, Mar 8, 2017 at 10:29 PM, Alex Kleider <aklei...@sonic.net> wrote: > On 2017-03-08 17:03, Alan Gauld via Tutor wrote: >>
>> My first reaction was to sort the initial list then iterate >> over it creating a new sublist for each change of value. >> But, it only works for homogenous lists. For mixed types >> I'd probably opt for a dictionary: >> >> def f(lst): >> res = {} >> for item in lst: >> res.setdefault(item,[]).append(item) >> return list(res.values()) >> > > The above works BUT > how???? > > Things like this can usually be broken down into their component parts but > I've been unsuccessful doing so: Alex, I think you can break this down as follows: py3: res = {} py3: def key_item_to_res(item): ... res.setdefault(item, []).append(item) ... py3: key_item_to_res(3) py3: res {3: [3]} py3: key_item_to_res(3) py3: res {3: [3, 3]} py3: key_item_to_res(2) py3: res {3: [3, 3], 2: [2]} I think you can play with this and see how Alan's code works. The setdefault(item, []) method checks the dictionary it is acting on for the key, "item". If it finds it then it will execute the "append(item)" method on the sublist attached to that key. If it does not find it, then it creates a new key, "item", attaches the empty list, "[]", to that key, and then appends item to that empty list. boB _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor