Python 从字符串中提取字典键值

Python 从字符串中提取字典键值,python,string,list,Python,String,List,我目前正在使用python通过433Mhz的链接将python字典从一个raspberry pi传输到另一个raspberry pi,使用虚拟线(vw.py)发送数据 vw.py的问题在于发送的数据是字符串格式的 我正在成功地接收PI_no2上的数据,现在我正在尝试重新格式化数据,以便将其放回字典中 我创建了一个小片段进行测试,并创建了一个临时字符串,其格式与从vw.py接收到的格式相同 到目前为止,我已经成功地在冒号处拆分了字符串,现在我正试图去掉双引号,但没有取得多大成功 my_status

我目前正在使用python通过433Mhz的链接将python字典从一个raspberry pi传输到另一个raspberry 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']

但是该条带去除了所有单个语音标记。

您可以使用
ast.literal\u eval

import ast
temp = "'mycode':['1','2','firstname','Lastname']"
key,value = map(ast.literal_eval, temp.split(':'))
status = {key: value}
将输出

{'mycode': ['1', '2', 'firstname', 'Lastname']}

这应该不难解决。您需要做的是
剥离列表字符串中的
[]
,然后
拆分
。完成此操作后,遍历元素并将其添加到列表中。您的代码应该如下所示:

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

,,这与cricket\u 007使用语法树解析器的建议不同——you's格式与标准格式非常相似。这是一个非常轻量级和直观的框架,所以我建议使用它

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在评论中建议。这将允许您存储更复杂的对象,尽管您可能会丢失您一直在尝试的人类可读格式

使用
ast.literal\u eval
,可能会添加
{
}
从头到尾,所以它是一个字典,但可以安全地评估它。您是否尝试使用JSON?或者您可以将数据用于更复杂(但特定于python)的数据结构。这非常有效。谢谢你的快速回复。