如何在格式化操作后将现有词典制成一个列表?

问题描述 投票:0回答:1

我有一个要处理的字典列表,以便它与 influxDB 字典格式匹配:

dict={
"measurement": 'measurement_name",
"tags" : {"tag_key":"tag_value"},
"fields : {"field_name" : field_value}
}

我的听写列表:

list_val_machines=[
{"machine1_Data_variable1": value,
"machine1_Data_variable2" : value},
{"machine2_Data_variable1": value,
"machine1_Data_variable2" : value}
]

所以这是我到目前为止尝试过的:

for k,v in enumerate(list_val_machines): #loop on list items 
    
    for i,j in v.items(): #iterate on every key value of each dict 
        #list_machine_names=[]
        #for k,v in raw_data_dict.items():
        #list_machine_names.append(machine_name)
        machine_name=i.split('_')[0] #parse machine name 
        variable_names=list(v.keys()) #get variable names (tag keys)
        values_name=list(v.values()) #get values (field values)
        for l,m in enumerate(variable_names):
            for n,o in enumerate(values_name):
                d={
                "measurement" : machine_name,
                "tags" : {"variable_name": m},
                "fields" : {"variable_name": o}     
                }
        list_d.append(d)
data=list_d

data variable looks like this: 
for p in data:
  print(p)

output:

{'measurement': 'machine1', 'tags': {'variable_name': 'machine1_Data_variable1'}, 'fields': {'variable_name': 0.0}}
{'measurement': 'machine1', 'tags': {'variable_name': 'machine1_Data_variable1'}, 'fields': {'variable_name': 0.0}}
{'measurement': 'machine1', 'tags': {'variable_name': 'machine1_Data_variable1'}, 'fields': {'variable_name': 0.0}}
{'measurement': 'machine1', 'tags': {'variable_name': 'machine1_Data_variable1'}, 'fields': {'variable_name': 0.0}}
{'measurement': 'machine2', 'tags': {'variable_name': 'machine2_Data_variable1'}, 'fields': {'variable_name': 0.0}}
{'measurement': 'machine2', 'tags': {'variable_name': 'machine2_Data_variable1'}, 'fields': {'variable_name': 0.0}}
{'measurement': 'machine2', 'tags': {'variable_name': 'machine2_Data_variable1'}, 'fields': {'variable_name': 0.0}}

测量名称是正确的,但我对每台机器都有相同的标记字段(例如:machine1_Data_variable1),并且给定机器中的每个变量都有相同的字段值。我不明白这里出了什么问题。我想要每个变量有 1 个具有正确变量名称和值的字典。

关于如何实现这一目标有任何提示吗?

上面提到了我尝试过的

python dictionary
1个回答
0
投票

您不需要四个循环,每个循环有两个迭代器。

lst = [
    {"machine1_Data_variable1": 0.1, "machine1_Data_variable2": 0.2},
    {"machine2_Data_variable1": 0.3, "machine2_Data_variable2": 0.4}
]

为您的结果创建一个空列表:

res_lst = []

现在使用一个循环来迭代原始列表的元素,并使用第二个循环来迭代字典的元素:

for orig_data in lst:
    for key, value in orig_data.items():
        machine_name = key.split('_')[0]
        variable_name = key

        tmp = {
            "measurement": machine_name,
            "tags": {"variable_name": variable_name},
            "fields": {"variable_value": value}
        }
        res_lst.append(tmp)


              
© www.soinside.com 2019 - 2024. All rights reserved.