我目前正在使用python通过433Mhz链接将一个python字典从一个覆盆子pi传输到另一个,使用虚拟线路(vw.py)发送数据。
vw.py
的问题是发送的数据是字符串格式。
我已成功接收有关PI_no2的数据,现在我正在尝试重新格式化数据,以便将其放回字典中。
我已经创建了一个小片段来测试,并创建了一个临时字符串,其格式与从vw.py
收到的格式相同到目前为止,我已成功将字符串拆分为冒号,我现在正试图摆脱双引号,但没有取得多大成功。
my_status = {}
#temp is in the format the data is recieved
temp = "'mycode':['1','2','firstname','Lastname']"
key,value = temp.split(':')
print key
print value
key = key.replace("'",'')
value = value.replace("'",'')
my_status.update({key:value})
print my_status
给出结果
'mycode'
['1','2','firstname','Lastname']
{'mycode': '[1,2,firstname,Lastname]'}
我要求值的格式为
['1','2','firstname','Lastname']
但条带摆脱了所有单个语音标记。
答案 0 :(得分:2)
您可以使用#include <stdio.h>
#include <math.h>
double polyEvaluate(double coefficients[], int order, double x)
{
int i, j;
double polyExp[order], polyProd[order];
double sum;
double constant = coefficients[order];
double temp;
for(i=order-1; i>0; i--){
polyExp[i]=pow(x, i);
}
j=order;
i=0;
while (i<j){
temp=polyExp[i];
polyExp[i]=polyExp[j];
polyExp[j]=temp;
i++;
j--;
}
for(i=0; i<order; i++){
polyProd[i]=coefficients[i] * polyExp[i];
}
for(i=0; i<order; i++) {
sum+=polyProd[i];
}
sum+=constant;
return(sum);
}
int main(void)
{
int order, i;
double input;
double coefficients[order+1];
printf("Enter the order of the polynomial: ");
scanf("%d", &order);
printf("\nEnter the coefficients: \n");
for(i=0; i<=order; i++)
{
printf(" >> ");
scanf("%lf", &coefficients[i]);
}
printf("\nEnter the value of x: ");
scanf("%lf", &input);
printf("\nThe value of the function is: %lf", polyEvaluate(coefficients, order, input));
return(0);
}
ast.literal_eval
将输出
import ast
temp = "'mycode':['1','2','firstname','Lastname']"
key,value = map(ast.literal_eval, temp.split(':'))
status = {key: value}
答案 1 :(得分:0)
这应该不难解决。您需要做的是strip
离开列表字符串中的[ ]
,然后split
除,
。完成此操作后,迭代元素会将它们添加到列表中。您的代码应如下所示:
string = "[1,2,firstname,lastname]"
string = string.strip("[")
string = string.strip("]")
values = string.split(",")
final_list = []
for val in values:
final_list.append(val)
print final_list
这将返回:
> ['1','2','firstname','lastname']
然后获取此列表并将其插入到词典中:
d = {}
d['mycode'] = final_list
此方法的优点是您可以独立处理每个值。如果您需要将1
和2
转换为int
,那么您将能够将其他两个转换为str
。
答案 2 :(得分:0)
除了cricket_007建议使用语法树解析器之外 - 您的格式与标准yaml格式非常相似。这是一个非常轻量级和直观的框架,所以我建议
a = "'mycode':['1','2','firstname','Lastname']"
print yaml.load(a.replace(":",": "))
# prints the dictionary {'mycode': ['1', '2', 'firstname', 'Lastname']}
你的格式与yaml之间唯一不同的是冒号需要一个空格
如果这很重要,它还会为您区分原始数据类型。删除1
和2
周围的引号,并确定它们是否为数字。
Tadhg McDonald-Jensen在评论中提出pickling。这将允许您存储更复杂的对象,但您可能会丢失您正在尝试的人类可读格式