私が見ている問題は次のとおりです。辞書のリストを取得します。この中には、有効な結果と無効な結果の明らかなケースがあります。したがって、リスト内包表記内に単純な三項演算子を記述して、失敗時にデフォルトのメッセージを取得します。ただし、失敗ごとにデフォルトが提供されます。
すべてのリストが同じ長さであることがわかっている場合、これを同じ理解内の単一の失敗メッセージに減らすことは可能ですか?
このコード例の目的は、キーがリスト内の辞書にない場合に 'DEFAULT' の値を持つようにすることです。テストするために、簡単な印刷を行います。
print(out)
>>> ['DEFAILT']
これが私のテストデータと単純で成功した結果です:
lis_dic = [{1:'One',2:'Two',3:'Three'},
{1:'Ichi',2:'Ni',3:'San'},
{1:'Eins',2:'Zvi',3:'Dri'}]
key = 1
out = [i[key] for i in lis_dic]
print(out)
>>> ['One', 'Ichi', 'Eins']
エラー処理試行:
key = 4
out = [i[key] for i in lis_dic if key in i]
print(out)
>>> []
out = [i.get(key, 'DEFAILT') for i in lis_dic]
print(out)
>>> ['DEFAILT', 'DEFAILT', 'DEFAILT']
out = [i[key] if key in i else 'DEFAULT' for i in lis_dic ]
print(out)
>>> ['DEFAILT', 'DEFAILT', 'DEFAILT']
ご覧のとおり、これらの結果はすべて、単一の結果ではなく、結果がないか、3 つの結果になります。
また、else の場所を移動しようとしましたが、構文エラーが発生し続けました。
ああ、これは有効な結果の順序を変更する可能性があるため、役に立ちません。
out = list(set([i[key] if key in i else 'DEFAULT' for i in lis_dic ]))