2016-08-18 8 views
0

ループを使用して辞書をフィルタリングする方法に関する質問があります。ここでキーごとに複数のキーと複数の値を持つ辞書をフィルタリングする

は、辞書の例である:各キーでの第三値は< 100であれば

d = {'beta': ['ABC', '1', '5', '10', '15'], 
    'lambda': ['DEF', '3', '30', '22.2', '150'], 
    'omega': ['RST','15', '54.4', '150', '75'] 
} 

どのように私は、キーを削除するために辞書をフィルタリングしていますか?言い換えれば、if関数の後に、オメガだけを辞書に残す必要があります。
は、私が試した:

for k, v in d.iteritems(): 
    r = float((d[key][2])) 
    if r < float(100): 
     del d[k] 

しかし、それは動作しませんでした。何かご意見は?ここではPythonプログラミングの初心者です。 150は100

+0

どのようにすべきであるように、出力リストを見て? – user1767754

+0

理想的には、d = {'lambda':3,30,22.2,150} – Deuce525

+0

の3番目の値なので、基本的に3番目の値が100を超えているため、辞書はOmegaキーを保持するだけで、すべてのオメガキー値。単に、私のループは、ベータとラムダのキーを削除する必要があります。 – Deuce525

答えて

0
def cast_values(v): 
    try: 
     return float(v) 
    except ValueError: 
     return v 

new_d = {k:[ cast_values(i) for i in v ] for k,v in d.items() if float(v[3]) > 100} 

結果よりも大きいので

新しい辞書はちょうどオメガキーを残す必要があります。

new_d = {'omega': ['RST', 15, 54.4, 150, 75]} 
+0

Jclarke、私はそれが動作すると思うが、私はこれを適用しようとした私の実際のプログラムでは、私に文字列を浮動小数点に変換できないという構文エラーを与える。私はそのキーの値を文字列であり値ではないとみなしていると思います。どのようにそれを修正する上で任意のアイデア? – Deuce525

+0

値の代わりに誤ってキーを渡していない限り、そのエラーが発生します。あなたが与えた情報でコードをテストし、その問題を解決しません。コードの 'float()'に適切な値を渡していることを確認してください。 – JClarke

+0

'ValueError:文字列を浮動小数点に変換できませんでした:' 'float( 'word')'のように渡されても 'float( '100')'を正しくキャストした場合に起こります。 – JClarke

関連する問題