Ответ 1
Вы можете использовать defaultdict(list)
.
from collections import defaultdict
result = defaultdict(list)
for widget_type, app in widgets:
result[widget_type].append(app)
Может ли этот код 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)])
Вы можете использовать defaultdict(list)
.
from collections import defaultdict
result = defaultdict(list)
for widget_type, app in widgets:
result[widget_type].append(app)
Альтернативой defaultdict
является использование метода setdefault
стандартных словарей:
result = {}
for widget_type, app in widgets:
result.setdefault(widget_type, []).append(app)
Это зависит от того, что списки изменяемы, поэтому то, что возвращается из setdefault, - это тот же список, что и словарь, поэтому вы можете добавить его.
может быть немного медленным, но работает
result = {}
for widget_type, app in widgets:
result[widget_type] = result.get(widget_type, []) + [app]