首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在for循环中组合/连接变量和“对象路径”?

如何在for循环中组合/连接变量和“对象路径”?
EN

Stack Overflow用户
提问于 2022-01-14 12:52:51
回答 1查看 123关注 0票数 1

我正在编写一个脚本,可以将.json格式转换为.idf格式,以便在EnergyPlus中进行能量模拟。作为这个脚本的一部分,我需要根据一些时间点和值来创建时间表,直到给定的时间为止。例如,这是我试图转换的.json元素中的一个:

代码语言:javascript
复制
"BOT": {"SpacesInModel": [
               {"IndoorClimateZone": {
                     "Schedules": {
                           "PeopleSchedule": {"Timer": [
                                { "$numberInt": "0" },
                                { "$numberInt": "10" },
                                { "$numberInt": "20" },
                                { "$numberInt": "24" }
                            ],
                            "Load": [{ "$numberDouble": "0.5" }, { "$numberInt": "1" }, { "$numberDouble": "0.5" }]
}

目前,我已经创建了以下代码,用于读取和写入.idf文件所需的输入,但我希望将其作为for循环而不是若干if语句来执行。

代码语言:javascript
复制
### Define helper function determining the number format
def IntOrDouble(path_string):
    try:
        return_value = path_string["$numberInt"]
    except Exception:
        return_value = path_string["$numberDouble"]
    return(return_value)

### Create .idf object and loop over .json format extracting schedule inputs

for item in data['BOT']['SpacesInModel']:
    InputFile.newidfobject("Schedule:Day:Interval") #.idf object
    DailySchedule = InputFile.idfobjects["Schedule:Day:Interval"][-1]
    
    People_Time = item["IndoorClimateZone"]["Schedules"]["PeopleSchedule"]["Timer"]
    People_Load = item["IndoorClimateZone"]["Schedules"]["PeopleSchedule"]["Load"]

    if len(People_Time) >= 0 and len(People_Time) != 0:
        DailySchedule.Time_2 = IntOrDouble(People_Time[0]) 
        
    if len(People_Time) >= 1 and len(People_Time) != 1:
        DailySchedule.Time_2 = IntOrDouble(People_Time[1])
        DailySchedule.Value_Until_Time_2 = IntOrDouble(People_Load[0])
        
    if len(People_Time) >= 2 and len(People_Time) != 2:
        DailySchedule.Time_3 = IntOrDouble(People_Time[2])
        DailySchedule.Value_Until_Time_3 = IntOrDouble(People_Load[1])

    if len(People_Time) >= 3 and len(People_Time) != 3:
        DailySchedule.Time_4 = IntOrDouble(People_Time[3])
        DailySchedule.Value_Until_Time_4 = IntOrDouble(People_Load[2])

    if len(People_Time) >= 4 and len(People_Time) != 4:
        DailySchedule.Time_5 = IntOrDouble(People_Time[4])
        DailySchedule.Value_Until_Time_4 = IntOrDouble(People_Load[3])

我的问题是,我不知道如何将变量DailySchedule与可变对象名/path (例如Time_1Load_4 )“连接”。Time_i Load_i的索引必须遵循for循环的索引。到目前为止,这是我得到的最接近的(知道这不是一个真正的解决方案:-)

代码语言:javascript
复制
for i in range(len(People_Time)):
        DailySchedule."Time_{0}".format(i+1) = IntOrDouble(People_Time[i+1])
        DailySchedule."Load_{0}".format(i+1) = IntOrDouble(People_Load[i]) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-14 13:01:29

您可以使用pythons "F-字符串“向字符串添加一个变量,并使用方括号表示法访问字典中的项。

代码语言:javascript
复制
for i in range(len(People_Time)):
    DailySchedule[f"Time_{i+1}"] = IntOrDouble(People_Time[i+1])
    DailySchedule[f"Time_{i}"] = IntOrDouble(People_Load[i]) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70710866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档