элегантное разделение списка (или dict) на два с помощью некоторой произвольной функции в python

Есть ли какой-нибудь элегантный способ разбить список / словарь на два списка / слов в 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)

Я надеялся, что будет какой-то такой же элегантный способ разделения списка, за один проход

10
задан Li Haoyi 31 July 2011 в 02:36
поделиться