7

私はこれを達成するためにワンライナーを書きました:

vocab_tag = dict(zip(*reversed(zip(*tag_vocab.items()))))

誰かがより理解しやすい/直接的なものを書くことができますか?

4

3 に答える 3

15

読みやすく短いdictの理解は、おそらく最善の方法です。

vocab_tage = {value: key for key, value in tag_vocab.items()}

dict()2.7より前では、辞書内包表記は存在しませんが、ジェネレータ式で簡単に置き換えることができます。

vocab_tage = dict((value, key) for key, value in tag_vocab.items())

これは、同じ値のキーがないことを前提としていることに注意してください(質問の例のように)。

于 2013-01-02T23:52:57.927 に答える
2

このワンライナーを試してみてください:dict(map(reversed, table.items()))

于 2013-01-03T03:20:20.413 に答える
2

パフォーマンス+読みやすさ

時間のパフォーマンスを考えると、辞書の理解が最善の解決策です。読みやすく、パフォーマンスも優れています。

与えられた辞書、、は次のaように定義されます

a = {'1' : 'a', '2' : 'b', '3' : 'c', '4' : 'd'}

実装は次のように実行されます。

オリジナル

%%timeit
b = dict(zip(*reversed(zip(*a.items()))))

100000 loops, best of 3: 3.09 µs per loop

ガレス・ラティ答え

%%timeit 
c = {v: k for k, v in a.items()}

1000000 loops, best of 3: 776 ns per loop

ノクティス・スカイタワー答え

%%timeit 
d = dict(map(reversed, a.items()))

100000 loops, best of 3: 4.38 µs per loop

メソッドを使用したGarethLatty回答の変更.iteritems()

<Python 3を使用.iteritems()すると、パフォーマンスがわずかに速くなり、メモリ効率が向上します。

%%timeit
e = {v: k for k, v in a.iteritems()}

1000000 loops, best of 3: 598 ns per loop
于 2016-07-11T12:58:04.750 に答える