我有一个要处理的字典列表,以便它与 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 个具有正确变量名称和值的字典。
关于如何实现这一目标有任何提示吗?
上面提到了我尝试过的
您不需要四个循环,每个循环有两个迭代器。
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)