[英]extract a dictionary key value from a string
我目前正在使用 python 通過 433Mhz 鏈接將 python 字典從一個樹莓派傳輸到另一個樹莓派,使用虛擬線 (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_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']}
這應該不難解決。 您需要做的是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
。
替代 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 建議在評論中進行腌制。 這將允許您存儲更復雜的對象,盡管您可能會丟失您一直在嘗試的人類可讀格式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.