質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

1921閲覧

pythonでfor文で回してlistを作成し、listにappendしている時、時より'KeyError'が出るのでそれを別の文字列を入れて作業を続けたい

kipipipi

総合スコア60

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/09/13 11:05

編集2020/09/13 11:10

タイトル通り下記のようなコードでlistにlistを追加しています。
APIで受けたデータから必要な部分を抜粋してlistを作っているのですが、あると思っていたデータがない場合があったのでtry-exceptを使用すると'KeyError'を拾った回が飛ばされてしまいます。
当たり前と言えば当たり前なのですが、その要素に'none'という文字列か何か追加して、スキップせずにそのlistを完成させたいです。

python

1 try: 2 list.append( 3 [PPPPPP_result["AAAA"]["aaaa"], 4 PPPPPP_result["AAAA"]["bbbb"], 5 PPPPPP_result["AAAA"]["cccc"], 6 PPPPPP_result["BBBB"]["dddd"], 7 PPPPPP_result["CCCC"]["eeee"], 8 PPPPPP_result["FFFF"]["ffff"], 9 QQQQQ, 10 PPPPPP_result['AAAA']['GGGG']['X'], # ⑴ここが無いと言われます 11 PPPPPP_result['AAAA']['GGGG']['Y'], # ⑵たまにここも無いと言われます 12 PPPPPP_result['AAAA']['GGGG']['Z'] # ⑶最悪ここが無い場合もあります 13 ]) 14 except KeyError as e: 15 error_catch(e) #独自メソッド エラー内容とかを出力します 16         #ここでどんな処理をすればいいのか思いつきません 17 try: 18 list.append( 19 [PPPPPP_result["AAAA"]["aaaa"], 20 PPPPPP_result["AAAA"]["bbbb"], 21 PPPPPP_result["AAAA"]["cccc"], 22 PPPPPP_result["BBBB"]["dddd"], 23 PPPPPP_result["CCCC"]["eeee"], 24 PPPPPP_result["FFFF"]["ffff"], 25 QQQQQ, 26 'none', # こうしたとしても['Y']も無い場合もあるのでtry文を重ねるしかないですか??? 27 PPPPPP_result['AAAA']['GGGG']['Y'], # ここも無いと言われます 28 PPPPPP_result['AAAA']['GGGG']['Z'] 29 ]) 30 except KeyError as e: 31 error_catch(e) 32 try: 33 list.append( 34 [PPPPPP_result["AAAA"]["aaaa"],...

目標は下記のようなリストです

python

1list = [ [A,B,C,D,E,F,Q,'none','none',Z], ...] #このように'none'か何かを挿入して次に行きたいです

exceptのなかでtry-exceptを入れていけば動いていますが、全くもってスマートでは無いなと思っております。
ぜひスマート?な方法(短くする)を教えていただけないでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

例外を使わずに、存在しない可能性のあるキーはget構文で取得するとよいです。get構文は、キーが存在すれば対応する値が、キーが存在しなければ第二引数の値を返します。

list.append( [PPPPPP_result["AAAA"]["aaaa"], PPPPPP_result["AAAA"]["bbbb"], PPPPPP_result["AAAA"]["cccc"], PPPPPP_result["BBBB"]["dddd"], PPPPPP_result["CCCC"]["eeee"], PPPPPP_result["FFFF"]["ffff"], QQQQQ, PPPPPP_result['AAAA']['GGGG'].get('X', None), PPPPPP_result['AAAA']['GGGG'].get('Y', None), PPPPPP_result['AAAA']['GGGG'].get('Z', None) ])

投稿2020/09/13 13:55

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kipipipi

2020/09/15 00:37

ご回答ありがとうございます!!pythonなら便利な方法あるだろう。。。と思っていましたが、やはりあったのですね!! 今回こちらの方法を使用して、無事全ての配列の処理を終えることができました!本当に感謝いたします!
guest

0

PPPPPP_resultを**collections.defaultdict**で作成すると良いかもしれません。

投稿2020/09/14 06:15

ChaosRepainter

総合スコア108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kipipipi

2020/09/15 00:42

ご回答ありがとうございます!説明を読んでみてもいまいちピンときておりませんが、pythonにはまだまだ知らないメソッドやクラスが山ほどあることに絶望と楽しさを感じました。もう少しpython側のドキュメントを読まないと、と反省しています。。。
guest

0

例外に頼らないコーディングにすればいいのでは?

投稿2020/09/13 11:19

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kipipipi

2020/09/15 00:35

アドバイスありがとうございます! まさしく今回は例外に頼らない方法でクリアできました!例外に甘えてはいけませんね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問