是否有内置的代码通过索引函数索引列表?还是我必须这样做:python:索引列表作为字典
def index(alist, keyExtractor):
result = dict()
for item in alist:
key = keyExtractor(item)
if key is not None:
result[key] = item
return result
是否有内置的代码通过索引函数索引列表?还是我必须这样做:python:索引列表作为字典
def index(alist, keyExtractor):
result = dict()
for item in alist:
key = keyExtractor(item)
if key is not None:
result[key] = item
return result
你可能想使用字典理解:
>>> 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')}
没有,没有内置的功能,使用情况是比较少见的。如果keyExtractor
总是返回一个有效的密钥,您可以用更短的dict comprehension:
def index(alist, keyExtractor):
return {keyExtractor(item):item for item in alist}
试试这个:
{ keyExtractor(item) : item for item in alist }
它的问世在Python 2.7和Python 3
如果keyExtractor
回报None
你之后可能想要删除None
条目。
在蟒2.7:
{keyExtractor(i): i for i in alist}
对于较老的:
dict((keyExtractor(i), i) for i in alist)
1为'如果keyExtractor(X)'。 – 2012-03-14 18:11:14
可能希望使用'...如果keyExtractor(x)不是None}'以允许其“真实性”为False的键。 – martineau 2012-03-14 19:37:32
已修复!更好的方法是避免在keyExtractor上进行双重计算 – MikeyB 2012-03-16 03:22:12