簡體   English   中英

從字符串中提取字典鍵值

[英]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

這種方法的優點是您可以獨立處理每個值。 如果您需要將12轉換為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 之間唯一不同的是冒號需要一個空格

如果這很重要,它還將為您區分原始數據類型。 去掉12周圍的引號,它確定它們是數字。

Tadhg McDonald-Jensen 建議在評論中進行腌制 這將允許您存儲更復雜的對象,盡管您可能會丟失您一直在嘗試的人類可讀格式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM