Есть ли какой-нибудь элегантный способ разбить список / словарь на два списка / слов в python, используя некоторую произвольную функцию разделения?
Я легко мог бы иметь два понимания списка или два выбора, но мне кажется, что должен быть какой-то лучший способ сделать это, чтобы избежать повторения каждого элемента дважды.
Я мог бы легко сделать это с помощью цикла for и if, но это требует примерно 7 строк кода для того, что должно быть очень простой операцией.
Есть идеи?
Изменить:
Для справки, мои два решения были бы такими:
# given dict cows, mapping cow names to weight
# fast solution
fatcows = {}
thincows = {}
for name, weight in cows:
if weight < 100:
thincows[name] = weight
else:
fatcows[name] = weight
# double-list-comprehension solution would be
fatcows = {name: weight for name, weight in cows.items() if weight > 100}
thincows = {name: weight for name, weight in cows.items() if weight < 100}
Я был думаю, что должно быть что-то более элегантное, чем это, о чем я никогда не думал, что-то вроде:
thincows, fatcows = ??? short expression involving cows ???
Я знаю, что это можно сделать, написав функции высшего порядка, чтобы сделать это за меня, и я знаю, как сделать это вручную. Мне просто было интересно, есть ли какая-нибудь супер-элегантная языковая функция, которая могла бы сделать это за меня.
Это похоже на то, что вы можете написать свои собственные подпрограммы и еще много чего, чтобы делать SELECT в списке, или вы можете просто сказать
thincows = select(cows, lambda c: c.weight < 100)
Я надеялся, что будет какой-то такой же элегантный способ разделения списка, за один проход