2017-12-15 8 views
0

Pythonのenumerate()を返すタプル:enumerate()のインデックスと値を入れ替えますか?インデックスと値の

enumerate('abc') 
((0,'a'),(1,'b'),(2,'c')) 

私の代わりにitem,index順(('a', 0))でこれらのタプルを取得したいのですが。

どうすればいいですか?

私は次のように辞書を作成するために、逆にタプルを使用したい:

{'a':0,'b':1,'c':2} 
+4

単に: '{vは:列挙におけるkのためにK、V( 'ABC')}' – alfasin

答えて

4

使用dictそれを逆に理解:

result = {v: i for i, v in enumerate('abc')} 

@karakfaのポイントへの対応 - これは潜在的に上書きされます繰り返される要素。文字列がabcaの場合、aに割り当てられたインデックス値には3が含まれ、0には含まれません。

+1

だけのこと新しいキーがユニークでないかもしれないことに気づいてください! – karakfa

+0

['multidict.MultiDict'](https://pypi.python.org/pypi/multidict)のようなものにそれを渡すために、逆タプルのリストの理解に変更することができます(私は使用していないことに注意してくださいそのパッケージに問題がある場合は、別のオプションがあります)。 –

1

あなたのために仕事をするには、常に古くからある匿名の機能があります。最もクリーンな解決策ではありませんが、それは仕事を完了させます。 itertoolsライブラリ使用する

>>> dict((v, i) for i, v in enumerate('abc')) 
{'a': 0, 'b': 1, 'c': 2} 
0

発電機を使用

import itertools 
dict(zip('abc', itertools.count())) 

itertools.count()は、1、0 2を生成するジェネレータオブジェクトです...とzip機能だけ...よく一緒に2つをジップ。

1

一つの解決策である:

dict(map(lambda x: (x[1], x[0]), enumerate('abc'))) 
+0

これはいいですね。 –

0

また、リスト内包して試すことができます:

new_data=((0,'a'),(1,'b'),(2,'c')) 

print(tuple([(i[1],i[0])for i in new_data])) 

出力:

(('a', 0), ('b', 1), ('c', 2)) 
関連する問題