2016-10-04 19 views
0

私はPythonには新しく、問題があります。私は価値のあるキーを見つけようとしています。ただし、キーには複数の値があります。複数の値を持つキーを持つ辞書の共通の値を見つける

d = { 
    'a': ['john', 'doe', 'jane'], 
    'b': ['james', 'danny', 'john'], 
    'C':['john', 'scott', 'jane'], 
} 

私はDの値johnを見つけて、キーに、a、b及びcを取得したり、janeを見つけて、キーAとCを取得したいです。

+1

を与える方法で、あなたの辞書です逆さまに。名前でルックアップする場合(例: 'john')、それらはキーである必要があります。 –

+0

@ idjaw次のコードを試しました。私は全く働かなかった。 d.keys()の名前の場合: d [name] == 'john'の場合: 印刷名 –

+0

@ import.zeeコードが機能しないのは、値が複数の名前のリストであることです。個々の名前の文字列。だから、 '['john'、 'doe'、 'jane']!= 'john''のために' 'd [name] ==' john ''ならテストできません。代わりに 'in'リストのメンバシップテスト演算子を使用する必要があります:d [name]' –

答えて

1

これは簡単にlist comprehensionを使用して行うことができます。これは、すべてのキーと値のペア(for key,val in d.items())を含むdictのアイテムリストからすべてのキー/値ペアを繰り返し、値リスト(if 'john' in val)にターゲット文字列が含まれているペアのみを選択し、その結果からリストを作成しますキー([ key ... ])。

>>> [ key for key,val in d.items() if 'john' in val ] 
['b', 'a', 'C'] 
>>> [ key for key,val in d.items() if 'jane' in val ] 
['a', 'C'] 
+0

Thanks'Davidの '' john 'なら '' if' '。それは完璧に働いた –

1

だから、辞書項目を通過する必要があり、検索キーワードは、アイテムリストにある場合、対応するキーがリストに保存する必要があり、このリストが表示されることがあります。

d = {'a':['john', 'doe', 'jane'], 'b': ['james', 'danny', 'john'], 'C':['john', 'scott', 'jane'],} 
find ='jane' 

だから、これはロジックのpython

print ([m for m in d.keys() if find in d[m]]) 

に書かれており、これはあなたが何をしたいのか、本当にあるならば、それは次のような出力に

['a', 'C'] 
関連する問題