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