On 09/03/17 04:29, Alex Kleider wrote: >> 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????
setdefault returns the current value for the key or the default, in this case an empty list. So we can split it in two as: for item in lst: val = res.setdefault(item,[]) val.append(item) And since setdefault also assigns the default to the dict if it doesn't exist we don't need to add an extra assignment. We could have used get() instead: for item in lst: sub = res.get(item,[]) sub.append(item) res[item] = sub Is that any clearer? Breaking setdefault() down gives something like: try: sub = res[item] except KeyError: res[item] = [] sub = res[item] -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor