我有一个JSON数据的API,其中包含约600个条目,每个条目都包含有关对象的变化数据。在某些情况下,有一个关键数据值,在其他情况下则没有。我想检查一下是否存在该JSON数据并将其存储,以及是否没有移至下一个设备。
尝试对具有特定数据和不具有特定数据的条目进行排序:
if data["entity"][n]["sensor_data"]["light_ intensity"] in data["entity"]:
logger.debug("There is light_intensity data on this devcie")
light_ intensity = data["entity"][n]["sensor_data"]["light_ intensity"]
做到这一点的最佳方法是什么?现在,我得到KeyError
的“光强度”未定义-如果我手动查看数据并搜索具有light_ intensity
数据的实体,并像这样对其进行硬编码。>
light_ intensity = data["entity"][222]["sensor_data"]["light_intesity"]
logger.debug("Devcie 222 light_intesity: %s lums", light_intesity)
返回:
Device 222 light_intensity: 88 lums
这告诉我,我可以从确实有购买数据的实体那里得到KeyError
的实体读取数据。我正在尝试进行某种意义上的搜索,以使我能够找到哪些设备的读数百分比较低,并使用该数据,并跳过当前未发送该数据的设备。
答案 0 :(得分:1)
未定义“ light_intesity”的键错误
首先,您拼写的 intensity 错误,并且light_intensity
的值如果是字典列表,则不会是in data["entity"]
,但是强度仅仅是一个号码。
但是,如果要遍历所有元素并且不确定它们是否存在,请使用dict.get(key, default)
。
for i, e in enumerate(data.get("entity", [])):
sensor_data = e.get("sensor_data", dict())
light_intensity = sensor_data.get("light_intensity", None)
logger.debug("Device %d ; light_intensity: %s lums", i, light_intensity)