如何将生成器与JSON树合并

时间:2018-08-01 22:44:28

标签: python-3.x

我有以下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树的模式应该保持不变。

主要目标是使用非常漂亮的单行代码来减少嵌套代码块的数量!

0 个答案:

没有答案