2017-10-28 11 views
2

私は以下の2つの例のようなリストを持つ辞書を持っています。Python - 辞書内のリスト項目の存在を確認する

some_json = {'speaking_tone': [{'speaking_id': 0, 'spoken_text': 'register my device', 'tones': []}]} 

some_json = {'speaking_tone': [{'speaking_id': 0, 'spoken_text': 'So kind of you to help with the issue', 'tones': [{'tone_name': 'Polite'}]}]} 

「トーン」内に値が存在するかどうかを確認し、その後の処理を行いたいとします。そうでない場合は、次の手順に進みます。私は以下を試して、彼らは常に範囲外のエラーのインデックスになります。

if len(some_json["speaking_tone"][0]["tones"][0]["tone_name"]) > 0: 
+0

あなたはより多くのガードが必要です。たとえば、最初の例では 'some_json [" speaking_tone "] [0] [" tones "] == []'というように、範囲外の例外のインデックスを取得します。 – jonrsharpe

+0

最初の例が可能な場合、空の配列の0の位置を確認することはできません。 「音調」が空であるかどうか最初に確認し、そうでない場合は内容を確認する必要があります。 – fernand0

答えて

1

何空リスト?空のリストから何か(["tone_name"])にアクセスしようとしているため、エラーが発生します。 some_json["speaking_tone"][0]["tones"]が空でないかどうか最初に確認するのを避けるために。

some_json = {'speaking_tone': [{'speaking_id': 0, 'spoken_text': 'register my device', 'tones': []}]} 

if len(some_json["speaking_tone"][0]["tones"]) == 0: 
    print("Empty") 
else: 
    print("Something") 


# Another way 
if not some_json["speaking_tone"][0]["tones"]: 
    print("Empty") 
else: 
    print("Something here") 
0

あなたはanyを使用することができます。

some_json = {'speaking_tone': [{'speaking_id': 0, 'spoken_text': 'register my device', 'tones': []}]} 
if any(i["tones"] for i in some_json["speaking_tone"]): 
    pass 

あなたは目標値がトーンに存在するかどうかを確認したい場合、あなたはこれを試すことができます:some_json["speaking_tone"][0]["tones"]がある場合はどうなる

target_val = "something" 
if any(target_val in i["tones"] for i in some_json["speaking_tone"]): 
    pass 
関連する問題