Python: функция для извлечения данных всегда возвращает None - PullRequest
0 голосов
/ 15 марта 2012

У меня есть этот список словарей:

cust = [
        {"id": 1, "name": u"name 1", "bill_amount": 1000},
        {"id": 2, "name": u"name 2", "bill_amount": 5000},
        {"id": 3, "name": u"name 3", "bill_amount": 7600},
        {"id": 4, "name": u"name 4", "bill_amount": 30}
       ]

И я хочу получить список только имен.

Пытаясь это:

def getName(x): x["name"]
print map(getName, cust)

Возвращаетэто:

[None, None, None, None]

Почему?Я что-то упускаю из виду?

Ответы [ 3 ]

6 голосов
/ 15 марта 2012

Вы также можете использовать operator.itemgetter() вместо определения собственной функции для этого:

>>> import operator
>>> map(operator.itemgetter("name"), cust)
[u'name 1', u'name 2', u'name 3', u'name 4']
3 голосов
/ 15 марта 2012

Как уже указывалось, ваша функция ничего не возвращает.

Для записи, питонский способ сделать это не использовать map, а использовать понимание списка.

[d['name'] for d in cust]
3 голосов
/ 15 марта 2012
def getName(x):
    return x["name"]

В python функция, которая ничего не возвращает, возвращает None.Не путайте это с лямбда-синтаксисом (полезным, но не «pythonic»), который был бы: getName = lambda x: x["name"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...