2017-01-16 12 views
0

複数の{}があり、すべてが'admissionCountTotal'の要素を持つJSONを持っています。この要素のないものは誰でも構いませんが、この例のために、それがどれであるかがわかります。インラインでの試用以外

{ 
    "movie":{ 
     "boxOffice":[ 
      {"admissionCountTotal":123}, 
      {"admissionCountTotal":456}, 
      {"admissionCountTotal":1234}, 
      {"admissionCountTotal":1253}, 
      {"admissionCount":"this is not admissionCountTotal"}, 
      {"admissionCountTotal":61723}, 
      {"admissionCountTotal":1423}, 
      {"admissionCountTotal":12323}, 
      {"admissionCountTotal":5123} 
     ] 
    } 
} 

admissionCountTotalにある最大値を取得したいと考えています。これは動作しますので、私は基本的にそれを行う方法を発見した:

max(data['movie']['boxOffice'][sem]['admissionCountTotal'] for sem in xrange(0,3)) 

しかし、これにはない2つの理由から

max(data['movie']['boxOffice'][sem]['admissionCountTotal'] for sem in xrange(0,56)) 

  • data['movie']['boxOffice'][4]['admissionCountTotal']を取得しようとしているが与えられますエラー。
  • data['movie']['boxOffice'][9]['admissionCountTotal']を取得しようとすると、それ以上の要素がないため、エラーが発生します。しかし、私は(以上56個の要素が存在しないという事実を除いて)がありますどのように多くの要素を知ることができない

したがって、私は、インラインtry構造のいくつかの種類を持っているしたいのですが私は両方の問題を解決するだろうと思う。出来ますか ?そうでない場合は、どうすれば問題を回避できますか?

答えて

4

私は試してみる必要はないと思います。単に整数の範囲ではなく、boxofficeの要素をループする必要があります。

max(item['admissionCountTotal'] for item in data['movie']['boxOffice']) 

これらの項目のうち少なくとも一つは、実際には、合計を持っていないので、デフォルトでgetを使用することができます。

max(item.get('admissionCountTotal', 0) for item in data['movie']['boxOffice']) 
+0

そうそう、私は一種のMySQLのようである(そのことについて考えていましたIFNULL()がよく分かっていれば)、エラーを返すので、 'try'が必要だと思った。ありがとう。知識のためだけに、ある種のインライン 'try'がありますか? –

+1

いいえ、そんなことはありません。 tryとexceptはステートメントです。一般的に、ここにあるように通常は機能的なやり方がありますが。実際に例外を回避できない場合は、値を返すかエラーをキャッチする別の関数を定義することができます。 –

+0

ありがとう、ありがとう。そして、私が 'admissionCountTotal'(質問の私の例では5123)の最後の値を望むなら、どうすればそれを得ることができますか? –

関連する問題