Python: индексирование списка как диктат - PullRequest
0 голосов
/ 14 марта 2012

Есть ли встроенный код, который индексирует список с помощью функции индекса?Или я должен сделать это:

def index(alist, keyExtractor):
    result = dict()
    for item in alist:
        key = keyExtractor(item)
        if key is not None:
            result[key] = item
    return result

Ответы [ 4 ]

3 голосов
/ 14 марта 2012

Вы, вероятно, хотите использовать словарь понимания:

>>> import operator
>>> keyExtractor=operator.itemgetter(1) # for demonstration purposes

>>> aList = [('a', 'foo'), ('b', 'bar'), ('q', 'quux')]
>>> d = {keyExtractor(x):x for x in aList}
>>> if None in d:
      del d[None]
>>> d
{'quux': ('q', 'quux'), 'foo': ('a', 'foo'), 'bar': ('b', 'bar')}
1 голос
/ 14 марта 2012

В Python 2.7:

{keyExtractor(i): i for i in alist}

Для старших:

dict((keyExtractor(i), i) for i in alist)
1 голос
/ 14 марта 2012

Попробуйте:

{ keyExtractor(item) : item for item in alist }

Он доступен в Python 2.7 и Python 3.

Если keyExtractor возвращает None, вы можете удалить запись None впоследствии.

1 голос
/ 14 марта 2012

Нет, встроенной функции нет, так как сценарий использования относительно редок.Если keyExtractor всегда возвращает действительный ключ, вы можете использовать более короткое понимание слова :

def index(alist, keyExtractor):
    return {keyExtractor(item):item for item in alist}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...