Есть ли какой-нибудь элегантный способ разбить список / dict на два списка / dict в python, используя некоторую произвольную функцию splitter?
Я мог бы легко иметь два понимания списка или два выбора, но мне кажется, должен быть какой-то лучший способ сделать это, чтобы избежать повторения каждого элемента дважды.
Я мог бы сделать этолегко с помощью цикла 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)
Я надеялся, что найдется такой же элегантный способ разделение список, с одним проходом