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

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

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

270閲覧

リストの中に入っている辞書を取り出して別のリストに入れたい

Otazoman

総合スコア44

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/01/29 08:49

前提・実現したいこと

以下の様なリストがあります。

json1

1[ 2 [ 3 { 4 "111": "1", 5 "123": "-", 6 "234": "URL#", 7 "455": "〇", 8 "666": "150", 9 "777": "1000" 10 } 11 ] 12]

json2

1[ 2 [ 3 { 4 "111": "1", 5 "123": "-", 6 "234": "URL#", 7 "455": "〇", 8 "666": "200", 9 "777": "1200" 10 }, 11 { 12 "111": "あああ", 13 "123": "-", 14 "234": "URL#", 15 "455": "〇", 16 "666": "1000", 17 "777": "1500" 18 } 19 ] 20] 21

本当は下記の様にしたいのですが、うまく出力できません。
どうすれば、以下の様に意図する形式でデータを出力できるでしょうか。

json1

1[ 2 { 3 "111": "1", 4 "123": "-", 5 "234": "URL#", 6 "455": "〇", 7 "666": "150", 8 "777": "1000" 9 } 10]

json2

1[ 2 { 3 "111": "1", 4 "123": "-", 5 "234": "URL#", 6 "455": "〇", 7 "666": "200", 8 "777": "1200" 9 }, 10 { 11 "111": "あああ", 12 "123": "-", 13 "234": "URL#", 14 "455": "〇", 15 "666": "1000", 16 "777": "1500" 17 } 18]

該当のソースコード

Lambdaのpython3.7で組んでいます。
テーブルから検索キー群を取ってきて、取得した検索キー群で別のテーブルを検索します。検索結果はJSONでdictとして戻されてくるので、そのdictをリストに入れます。メインでもforをかけているのでリストにリストを入れ子するようなイメージになってしまっています。

python

1def gf(id1,id2,key1,key2,tn,age): 2 t3 = 'TABLE_NAME3' 3 result=[] 4 ic = get_JSON_val(t3) 5 if(len(ic) is not 0): 6 for rs in ic: 7 pc=rs['111'] 8 k3=pc+age 9 fee=get_JSON_val(k3,0,key1,0,t3) 10 if(len(fee) is not 0): 11 rs['666']=fee[0]['fee1'] 12 rs['777']=fee[0]['fee2'] 13 result.append(rs) 14 return result 15 16 17def lambda_handler(event, context): 18 t1 = os.getenv('TABLE_NAME1') 19 t2 = os.getenv('TABLE_NAME2') 20 k1 = os.getenv('KEY_NAME1') 21 k21 = os.getenv('KEY_NAME21') 22 k22 = os.getenv('KEY_NAME22') 23 c = '1010' 24 s1='' 25 s2 = '1' 26 s3 = '' 27 result = [] 28 i1 = get_code(ct,k1,t1) 29 for ik,iv in i1.items(): 30 m = re.match(k1,ik) 31 if(len(s1) is not 0): 32 skeys = search_keys() 33 for key in skeys: 34 if(not key == 0): 35 sk=key 36 s = gf(iv,sk,k21,k22,t2,s2) 37 if len(s) is not 0: 38 result.append(s) 39 40 return result

補足情報(FW/ツールのバージョンなど)

AWS Lambd Python
DynamoDB

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

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

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

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

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

guest

回答2

0

ベストアンサー

もしかして、こういうこと?

python

1 for ik,iv in i1.items(): 2 m = re.match(k1,ik) 3 if(len(s1) is not 0): 4 skeys = search_keys() 5 for key in skeys: 6 if(not key == 0): 7 sk=key 8 s = gf(iv,sk,k21,k22,t2,s2) 9 if len(s) is not 0: 10 # result.append(s) 11 result.extend(s)

投稿2019/01/29 14:02

hayataka2049

総合スコア30933

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

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

Otazoman

2019/01/30 00:21

ありがとうございます。意図した動作です。非常に勉強になりました。 resultにappendするとリストにオブジェクトが追加されるので[[{return[0]}],・・・,[{return[n]}]]というイメージですが、extendだと要素が追加されるから[{return[0]},・・・,{return[n]}]と意図通りの動きになるということですね。初歩的な質問に回答いただきありがとうございました。
hayataka2049

2019/01/30 02:37

extendはリストの拡張ですね
guest

0

こんにちは。

かならずリストがひとつ深くなってしまうのであれば
最後にreturn result[0]を返せばいいかと。

投稿2019/01/29 09:04

firedfly

総合スコア1131

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

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

Otazoman

2019/01/29 09:55

result[0]で要素取れるんですね。ありがとうございます。 せっかく回答いただいたのですが、今回のネックがlambda_handlerのskeysでforを利用してgfからreturnされるものをすべて取りたいのですが、そちらがうまく取れません。gfでresult[0]とすると行単位の値しか取れず、lambda_handlerでreturn[0]とすると列単位での値しか取れないような形です。 return[0]・・・・[n]を[{return[0]},・・・・・{return[n]}]というようにうまくできる方法があればご教示いただけると助かります。
firedfly

2019/01/29 11:59 編集

構造はよくわからないですが、最終的に一段深いリストになるんですよね? json1やjson2を送る直前か、受け取ったあとに一段分を掘ればいいんじゃないでしょうか。
Otazoman

2019/01/30 00:25

ご回答ありがとうございます。本当に初歩的なことでした。リストの中にリストのオブジェクト自体が追加されていたので入れ子構造みたいになっていたようです。{return[n]}を要素とみなして追加してやれば、意図したデータ構造を取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問