我有以下python代码,用来自生成器ec2_tcs['zones']
的更高精度的温度替换JSON树列表ec1_api.temperatures()
中的低精度温度。
if CONF_HIGH_PRECISION:
try:
from evohomeclient import EvohomeClient as EvohomeClientVer1
ec1_api = EvohomeClientVer1(client.username, client.password)
for temp in ec1_api.temperatures(force_refresh=True):
for zone in ec2_tcs['zones']:
if str(temp['id']) == str(zone['zoneId']):
if zone['temperatureStatus']['isAvailable']:
zone['temperatureStatus']['temperature'] \
= temp['temp']
break
# TypeError: usually occurs in client library if problems with vendor's website
except TypeError:
_LOGGER.warning(
"Failed to obtain higher-precision temperatures"
)
JSON数据如下所示(JSON数据数组,每个“区域”一个):
[
{
'zoneId': '3432521',
'name': 'Main Room'
'temperatureStatus': {'temperature': 21.5, 'isAvailable': True},
'setpointStatus': {'targetHeatTemperature': 5.0, 'setpointMode': 'FollowSchedule'},
'activeFaults': [],
}, {
...
...
}
]
以及来自生成器的每个结果,如下所示:
{'thermostat': 'EMEA_ZONE', 'id': 3432521, 'name': 'Main Room', 'temp': 21.55, 'setpoint': 5.0}
我知道Python必须有更好的方法来执行此操作,但是我似乎无法使其运行起来。任何建议将不胜感激。
我可以“按摩”生成器,但是有充分的理由解释为什么JSON树的模式应该保持不变。
主要目标是使用非常漂亮的单行代码来减少嵌套代码块的数量!