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:
答
会发生什么事,如果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
你需要更多的警卫。例如,在你的第一个例子中,'some_json [“speaking_tone”] [0] [“tones”] == []',所以当然你会得到一个索引超出范围的异常。 – jonrsharpe
如果第一个示例是可能的,则不能检查空数组中的0位置。也许你应该首先检查'音调'是否为空,如果不是,请检查内容。 – fernand0