Pythonでネストを減らす(if文によるdictのキーチェック編)
やりたいこと
元の方法
YAMLで記述された設定ファイルを読み込み、item_listキーが存在する場合にのみ、キーに対するリストに対してループ処理をするサンプルです。
for文でループ処理する前にif文でキーチェックをしているため、ネストが深くなってしまっています。
with open(config_file) as f: config = yaml.load(f) if 'item_list' in config: for item in config['item_list']: # ここでやりたい処理を記述
三項演算子を使って改善した方法
Pythonの三項演算子を使うことで、if文のキーチェックをfor文の行に持ってくることができます。
with open(config_file) as f: config = yaml.load(f) for item in config['item_list'] if 'item_list' in config else list(): # ここでやりたい処理を記述
上記のように記述することで、
- item_listキーが存在する場合は、そのキーに対するリストに対してループ処理
- item_listキーが存在しない場合は、空のリストに対してループ処理(つまり、処理をスキップさせる)
ことができます。
dictのgetを使って改善した方法
dictのgetメソッドを使うことで、さらにシンプルに記載できます。
with open(config_file) as f: config = yaml.load(f) for item in config.get('item_list', list()): # ここでやりたい処理を記述
dictのgetメソッドでは、get(key[, default])
のように記述でき、下記の振る舞いをします。
- dictにkeyが存在していれば、それに対する値を返す
- dictにkeyが存在していなければ、defaultを返す
- defaultが与えられない場合は、Noneを返す