はPythonのではなく、ステートメントとしてよりも、式で使用することができますif
/else
のバージョンがあります。構文がvalue1 if condition else value2
なので少し不思議です。条件はリスト内包を形成括弧の外にあることを
def to_json(self):
return {
'some_key': some_data,
'some_details': [detail.to_json() for detail in self.__details]
if self.__some_details
else [] # or else None?
}
注:お使いの辞書では、それはようなものになるだろう。あなたがそれを持っていたように、リスト全体の理解を条件付きにする方法はありません。各値に条件を付けることができますが(例:[x for x in xs if some_condition(x)]
)、その構文にはxs
が存在し、条件がfalseであっても反復可能でなければならず、条件がx
の値に依存しないと無駄になる可能性があります。上記のショートサーキットで使用されるif
/else
の構文なので、条件が偽であればリストの解説は評価されません。
条件が満たされていない場合にコードで実行する内容が完全にはっきりしていないため、リストの理解の代わりに空のリストを推測しました。 None
など、他の値を使用することもできます。ただし、条件が満たされていないときに'some_details'
キーを辞書に追加したくない場合、この方法は機能しません。あなたはそのような状況で辞書を構築するために複数のステートメントを使用する必要があります:
result = {'some_key': somedata}
if self.__some_details:
result['some_details'] = [detail.to_json() for detail in self.__details]
return result
あなたは '自己.__ some_details'場合に発生がしたいん何* *' NONE'のですか?ディクショナリの 'some_details'キーが空のリストを参照すべきか、あるいはそのキーを完全に省略すべきですか? – Blckknght