Если вы хотите применить одну функцию к списку объектов, которые все будут реагировать на эту функцию, вы хотите вызвать map()
:
map(sum, [[1,2,3],[2,3,4]]) # => [5, 9] ... sort of*
Программисты Python обычно предпочитают понимание списка длятакого рода вещи:
[sum(list) for list in list_of_lists]
Это очень похоже на понимание речи, которое вы уже делаете, и может быть либо скомбинировано следующим образом:
{k: sum(l) for (k, ll) in scores.items() for l in ll}
, либо выделено в какую-то логикуи в других местах.
Я не совсем уверен, в чем смысл самого внутреннего уровня вложенности списков, поскольку кажется, что все ваши самые сокровенные списки - просто одиночные.Я полагаю, что это может быть только из-за вашего примера, но также стоит посмотреть, можно ли выполнить рефакторинг, чтобы иметь только один уровень вложенности.
В качестве заключительного замечания, в общем, при работе со списками списков, может быть полезно взглянуть на почтенный модуль itertools в stdlib или другой более полный ответвление, такое как more-itertools , которое, как и следовало ожидать, обеспечивает flatten()
* функция 1021 *!(Хотя, как указывает другой ответчик, вы можете использовать chain.from_iterable
для достижения того же самого из коробки из itertools
)
* предостережение с map()
в том, что оно на самом деле возвращает map
объект, который будет перебирать сопоставленные значения.