2017-10-28 192 views
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

會發生什麼事,如果some_json["speaking_tone"][0]["tones"]是空的清單?由於您嘗試從空列表中訪問某些內容(["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 

如果你想檢查是否在色調存在的目標值,你可以試試這個:

target_val = "something" 
if any(target_val in i["tones"] for i in some_json["speaking_tone"]): 
    pass 
相關問題