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

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

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

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

Q&A

解決済

3回答

241閲覧

python 辞書の内部にリストがある場合のアクセス方法

noz_awsinf_sp

総合スコア62

Python

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

0グッド

1クリップ

投稿2020/08/19 08:52

conf.json内の”custom_fields”の値が配列になっており
if文のなかで"id"が1なら○○するという処理を試しているのですが
以下の通りエラーになっております。

質問の下部に記載した、hoge.pyで似たような処理がうまくいくことは確認しているのですが
test.pyのように、jsonファイルを読み込んで、辞書型に変換した変数でアクセスしようとすると
エラーになるのですがどのように改善すべきでしょうか?

Traceback (most recent call last): File "test.py", line 6, in <module> for i in (a["issue"]["custom_fields"]): TypeError: list indices must be integers or slices, not str

test.py

import json with open("./conf.json", "r") as f: a = json.load(f) for i in (a["issue"]["custom_fields"]): if i["id"] == 1: print(i["name"])

conf.json

{ "issue": [ { "project_id": 1, "subject": "APIテスト", "tracker_id": 5, "status_id": 1, "custom_fields": [ { "id": 1, "name": "a" }, { "id": 2, "name": "b" }, { "id": 3, "name": "c" } ] } ] }

hoge.py

l = [{"id": 1, "name": "test"}, {"id": 2, "name": "test2"}, {"id": 3, "name": "test3"}] for i in l: if i["id"] == 3: print(i["name"]) $ python hoge.py test3

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

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

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

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

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

guest

回答3

0

ベストアンサー

a["issue"] は配列になっているのでもう一段 for 〜 in してください

import json with open("./conf.json", "r") as f: a = json.load(f) for i in (a["issue"]): if i["project_id"] == 1: print(i["subject"]) for custom_field in i["custom_fields"]: print(custom_field["name"])

投稿2020/08/19 09:06

YakumoSaki

総合スコア2027

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

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

0

a["issue"]["custom_fields"]a["issue"][0]["custom_fields"]としてください。

投稿2020/08/19 09:04

can110

総合スコア38262

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

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

0

Python

1b = a["issue"][0]["custom_fields"][0] 2if b["id"] == 1: 3 print(b["name"]) 4#a

投稿2020/08/19 09:00

meg_

総合スコア10580

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問