Подтвердить что ты не робот

Плут в Python

Я начал читать о underscore.js сегодня, это библиотека для javascript, которая добавляет некоторые функциональные программные лакомства, которые я использую для использования в Python. Один довольно классный сокращенный метод pluck.

На самом деле в Python мне часто нужно выщипывать какой-то конкретный атрибут и в конечном итоге делать это:

users = [{
    "name" : "Bemmu",
    "uid" : "297200003"
},
{
    "name" : "Zuck",
    "uid" : "4"
}]
uids = map(lambda x:x["uid"], users)

Если сокращение подчеркивания находится где-то в Python, это возможно:

uids = pluck(users, "uid")

Это, конечно, тривиально добавить, но это уже в Python?

4b9b3361

Ответ 1

Просто используйте понимание списка в любой функции, потребляющей uids:

вместо

uids = map(operator.itemgetter("uid"), users)
foo(uids)

делать

foo([x["uid"] for x in users])

Если вы хотите, чтобы uids перебирался, вам не нужно создавать список - вместо этого используйте генератор. (Замените [] на ().)


Например:

def print_all(it):
    """ Trivial function."""
    for i in it:
        print i

print_all(x["uid"] for x in users)

Ответ 2

В модуле funcy (https://github.com/Suor/funcy) вы можете выберите функцию pluck.

В этом случае, при условии, что funice доступен на вашем хосте, следующий код должен работать как ожидалось:

from funcy import pluck

users = [{
    "name" : "Bemmu",
    "uid" : "297200003"
},
{
    "name" : "Zuck",
    "uid" : "4"
}]

uids = pluck("uid", users)

Обратите внимание на то, что порядок аргументов отличается от порядка, используемого с underscore.js