Подтвердить что ты не робот

Создать или добавить к списку в словаре - можно ли это сократить?

Может ли этот код Python быть укорочен и все еще доступен для чтения с помощью itertools и устанавливает?

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

Я могу думать только об этом:

widget_types = zip(*widgets)[0]
dict([k, [v for w, v in widgets if w == k]) for k in set(widget_types)])
4b9b3361

Ответ 1

Вы можете использовать defaultdict(list).

from collections import defaultdict

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

Ответ 2

Альтернативой defaultdict является использование метода setdefault стандартных словарей:

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

Это зависит от того, что списки изменяемы, поэтому то, что возвращается из setdefault, - это тот же список, что и словарь, поэтому вы можете добавить его.

Ответ 3

может быть немного медленным, но работает

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