2012-03-14 75 views
0

是否有内置的代码通过索引函数索引列表?还是我必须这样做:python:索引列表作为字典

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

回答

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')} 
+0

1为'如果keyExtractor(X)'。 – 2012-03-14 18:11:14

+1

可能希望使用'...如果keyExtractor(x)不是None}'以允许其“真实性”为False的键。 – martineau 2012-03-14 19:37:32

+0

已修复!更好的方法是避免在keyExtractor上进行双重计算 – MikeyB 2012-03-16 03:22:12

1

没有,没有内置的功能,使用情况是比较少见的。如果keyExtractor总是返回一个有效的密钥,您可以用更短的dict comprehension

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

试试这个:

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

它的问世在Python 2.7和Python 3

如果keyExtractor回报None你之后可能想要删除None条目。

1

在蟒2.7:

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

对于较老的:

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