2016-08-01 10 views
1

私はしばしば、キーが辞書内にあるかどうか、そしてキーが役に立つ情報(私の場合は長さがゼロでない文字列)を持っているかどうかをPythonで調べています。例えば、私は頻繁にこのようなデータのためkwargsからをチェックする必要がありますように見える:辞書に空でない文字列が存在するかどうかを調べる方法は?

if ('partition' not in kwargs or kwargs['partition'] is None 
    or kwargs['partition'] == ""): 
    raise Exception("Need 'partition' for this method") 

私が行方不明ですこれを行うためのシンプルな、簡単な方法はありますか?

+3

'もしkwargs.get( 'パーティション'):' – idjaw

+0

キーがkwargs辞書にないなら、それでも機能しますか? – Randy

+0

「パーティション」キーが存在していても、それが何かを持っていなければならないことを確認したいのですか? – idjaw

答えて

1

は辞書オブジェクトのget()メソッドを使用し、Pythonはそのtruthiness自動的に判断しましょう:Python的には辞書の内容は、内部または外部インターフェイスであるかどうかに依存する場合がありますあるアプローチ

if not d.get('partition'): 
    raise Exception("Need 'partition' for this method") 
+2

コメントの余分な質問に基づいて、私は彼らもキーの値が空でないことをチェックしたいと思うと思います。キーが存在しても、何かを持っている必要があります。 OPのコメントを確認するのを待っています。それに気をつけてください。 – idjaw

+2

値が空文字列の場合、これは発生しません。 'kwargs.get(" partition "、" ")は" "'です。 – freebie

+2

私は明示的なキャストが必要とは思わない。 Pythonは既に暗黙の強制を行っています –

1

を。

プログラマがコンテンツを担当していない場合や、コマンドラインから読み込んだ辞書コンテンツを使ってライブラリを作成している場合は、良い防御プログラミングの練習としてOPに書かれている。

def key_contains_contents(user_dict, key): 
    return (key in user_dict) and user_dict[key] and len(user_dict[key]) > 0 

は、必要に応じて追加の句を追加します。これはあなたのコードでは一般的に十分なイディオムである場合は、次のような、あなたが探している特定のキーの上に一般化しながら、同様の処理を提供する関数を記述することもできます。

ディクテーションの内容がプログラム自体によって作成されている場合は、キーに意味のあるデータが含まれているかどうかを表す標準的な方法を考え出すこともできます。あなたが解決しようとしている特定の問題は、ある方法や他の方法を示唆するかもしれません。しかし、他の制約はありませんが、キーを最初に置いていないのが最も簡単です。

関連する問題