2

辞書を返す関数があります:

 def to_dict(self):
     return dict({'identification': self.identifier,
                  'information': self.information,
                  'nodes': {e.position: e.to_dict for e in self.children}
                  })

オプションで各k/vを追加する方法はありますか?これは機能しません。例:

def to_dict(self):
         return dict({'identification': self.identifier,
                      'information': self.information,
                      'nodes': {e.position: e.to_dict for e in self.children} if self.children
                      })

バリエーションごとに個別の辞書を作成せずに、dict作成のオプション部分を追加する方法はありますか。これを行うためのより良い方法はありますか?

4

1 に答える 1

5

dictをローカルに保存し、戻る前に追加情報で更新します。

def to_dict(self):
     retval = {'identification': self.identifier,
               'information': self.information,
              }
     if self.children:
         retval['nodes'] = {e.position: e.to_dict for e in self.children}
     return retval

私の例ではコンストラクターを削除しましたdict()が、完全に冗長です。ただし、すべてのキーは有効なPython識別子でもあるため、コンストラクターとキーワードの引数を使用して、少しコンパクトな方法でdictを定義できます。dict()

def to_dict(self):
     retval = dict(identification=self.identifier,
                   information=self.information)
     if self.children:
         retval['nodes'] = {e.position: e.to_dict for e in self.children}
     return retval
于 2012-09-28T13:34:01.777 に答える