2016-12-06 13 views
0

オブジェクトを返すときにif文を使用するにはどうすればよいですか?python:オブジェクトを返すときにifを使用する方法

コード:

def to_json(self): 
    return { 
     'some_key': some_data, 
     'some_details': [ 
      if self.__some_details: # if it is not None 
       detail.to_json() for detail in self.__details 
     ] 
    } 
+0

あなたは '自己.__ some_details'場合に発生がしたいん何* *' NONE'のですか?ディクショナリの 'some_details'キーが空のリストを参照すべきか、あるいはそのキーを完全に省略すべきですか? – Blckknght

答えて

0

は以下に適しますか?

def to_json(self): 
    if self.__some_details: 
     some_details = [ detail.to_json() for detail in self.__details ] 
    else: 
     some_details = [] 
    return { 
     'some_key': some_data, 
     'some_details': some_details 
    } 
+0

'some_details = detail.to_json()for detail in self .__ details'は有効な構文ではありません。おそらく、 '= 'の右側の式のまわりに角括弧を入れてリストの理解にしたいと思うでしょう。 – Blckknght

+0

ありがとうございます。今修正されました。私は元のコードからコピーしたが、括弧(別の行にある)をコピーするのを忘れてしまった。 –

1

は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 
関連する問題