Python - 检查字典中的列表项是否存在

Python - 检查字典中的列表项是否存在

问题描述:

我有一个带有列表的字典,如下面的两个例子。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

会发生什么事,如果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") 

您可以使用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