从字符串

时间:2016-03-09 18:49:44

标签: python string list

我目前正在使用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']

但条带摆脱了所有单个语音标记。

3 个答案:

答案 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

此方法的优点是您可以独立处理每个值。如果您需要将12转换为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之间唯一不同的是冒号需要一个空格

如果这很重要,它还会为您区分原始数据类型。删除12周围的引号,并确定它们是否为数字。

Tadhg McDonald-Jensen在评论中提出pickling。这将允许您存储更复杂的对象,但您可能会丢失您正在尝试的人类可读格式