2012-03-14 2 views
0

インデックス関数を介してリストにインデックスを付けるコードが組み込まれていますか?それとも私がこれを行うにしているん:あなたはおそらく辞書内包表記を使用したいpython:dictとしてリストをインデックス化する

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)の場合のために。 –

+1

"truthiness"がFalseのキーを許可するには、keyExtractor(x)がNoneでない場合は '...を使用することができます。 – martineau

+0

修正済み!とにかくそれを行うより良い方法、keyExtractorの倍精度計算を避ける – MikeyB

1

をいいえ、組み込み関数は、ありません。

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

これは試してみてください:keyExtractorは常に有効なキーを返す場合、あなたは短いdict comprehension使用することができます

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

これは、Python 2.7とPythonで利用可能です3.

keyExtractor戻りNoneあなたをする場合その後Noneのエントリを削除することができます。パイソン2.7に

1

:古いため

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

dict((keyExtractor(i), i) for i in alist) 
関連する問題