python:将列表索引为dict

时间:2012-03-14 17:56:17

标签: python dictionary

是否有通过索引函数索引列表的内置代码?或者我必须这样做:

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

4 个答案:

答案 0 :(得分:3)

您可能想要使用词典理解:

>>> 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 :(得分:1)

不,没有内置功能,因为用例相对较少。如果keyExtractor始终返回有效密钥,则可以使用较短的dict comprehension

def index(alist, keyExtractor):
    return {keyExtractor(item):item for item in alist}

答案 2 :(得分:1)

试试这个:

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

它可以在Python 2.7和Python 3中使用。

如果keyExtractor返回None,您可能希望之后删除None条目。

答案 3 :(得分:1)

在python 2.7中:

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

对于年长者:

dict((keyExtractor(i), i) for i in alist)