2017-09-08 4 views
-1

私はオブジェクトを持っており、値がNoneであることを知りたいと思います。 そして、次のステップでキーを削除します。 私はこの方法を試してみてください。オブジェクト内の値がnoneで、Python3でキーと値を削除する方法はありますか?

>>> obj = {'a': '1', 'b': '2', 'c': '3', 'd': None, 'e': '4', 'f': None } 
>>> keys = list(obj.keys()) 
>>> for key in keys: 
...  if obj[key] == None: 
...   obj.pop(key, None) 
>>> obj 
{'a': '1', 'b': '2', 'c': '3', 'e': '4'} 

はこれを行うには良い方法はありますか?

+0

この方法で何が問題になりますか? –

+0

@ScottHunterこれを行う良い方法を探したいだけです –

+2

'keys = list(obj)'は属性の検索とキーのdictビューの作成を保存することに注意してください。 –

答えて

6

あなたは辞書内包表記を使用できます:あなたは(おそらくあなたはそれへの他の参照を持っているので)辞書卸売を交換したくない場合は

obj = {k: v for k, v in obj.items() if v is not None} 

を、そしてあなたのアプローチは、音ですが、行うことができますもう少し効率的にまだ.keys()を呼び出し避け、代わりにdict.pop()delを使用して:

for key in list(obj): 
    if obj[key] is None: 
     del obj[key] 

Noneのテストは常にisで行われるべきです。それはシングルトンオブジェクトです。

関連する問題