Плут в 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?
Ответы
Ответ 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