2012-02-10 6 views
3

タプルのリストから異なる値のリストを抽出するにはどうすればよいですか?タプルのリストから異なる値を抽出する

tuple = ((("test", 123), ("test", 465), ("test", 8910), ("test2", 123))) 

私はのようなリストを取得したい:今、私はこの「キー」により、すべての値にアクセスし、リストでそれらを取得したい

different_values = ("test", "test2") 

test_values = (123, 456, 8910) 
test2_values = (123) 

どのようにそれを行う?

+1

をなぜあなたのタプルのリストの周りの余分なparanthesis ?あなたの例ではリストはありませんが、タプルだけがあります。 – Nobody

+2

'tuple'を変数名として使わないでください。それはビルトインをシャドウします。 –

+1

@Nobody、申し訳ありませんが、間違っていました。 @スヴェン、そのアドバイスをありがとう。これはほんの一例でした。 – Razer

答えて

11

私はリストの辞書にデータを変換したい:

d = {} 
for k, v in tuples: 
    d.setdefault(k, []).append(v) 

今、あなたはd.keys()、およびd[k]など各キーkの値のリストとしてキーにアクセスすることができます。

(まもなく、誰かが一歩前進し、このために良いだろうdefaultdictを主張するだろう。彼らに聞いてはいけない、それは単に、この場合には重要ではありません。)

+0

「defaultdict」がここで好まれると感じないのであれば、好奇心から外れて、Sven、それはいつ好きですか? – unutbu

+3

@unutbu: 'defaultdict'の場合、すべての単一のキー検索で新しいキーが作成されることがあります。この場合、上記のループ中に新しいキーを作成したいだけです。キーが存在しない場合は、後のルックアップはすべて失敗します。だから*すべてのルックアップが存在しないキーを追加するのであれば、 'defaultdict'を使うでしょう。それ以外の場合は、辞書を変更する可能性のあるルックアップについて明示することをお勧めします。 'defaultdict'を考慮する別の状況は、デフォルト値のコンストラクタが高価な場合です。上記のコードは、必要でない場合でも、すべての反復で空のリストを作成します。 ... –

+0

... 'defaultdict'のオーバーヘッドのために、これは実際には' defaultdict'バージョンより速いですが、コンストラクタがより高価な場合、事態が変化する可能性があります。 –

関連する問題