Create or append to a list in a dictionary - can this be shortened?

Solution 1:

An alternative to defaultdict is to use the setdefault method of standard dictionaries:

 result = {}
 for widget_type, app in widgets:
     result.setdefault(widget_type, []).append(app)

This relies on the fact that lists are mutable, so what is returned from setdefault is the same list as the one in the dictionary, therefore you can append to it.

Solution 2:

You can use a defaultdict(list).

from collections import defaultdict

result = defaultdict(list)
for widget_type, app in widgets:
    result[widget_type].append(app)

Solution 3:

may be a bit slow but works

result = {}
for widget_type, app in widgets:
    result[widget_type] = result.get(widget_type, []) + [app]