我正在嘗試將字串轉換為有效的字典。
例如字串:
'{"value1":"\^stack\.\*/overflo\\w\$arr=1", "value2":"path c:\nord\tem\orme\test.exe"}'
我想得到一個字典
{"value1":"\^stack\.\*/overflo\\w\$arr=1",
"value2":"path c:\nord\tem\norme\test.exe"}
如何在不丟失特殊字符和不使用反斜杠轉義的情況下將此字串轉換為字典。
a_string = '{"value1":"\^stack\.\*/overflo\\w\$arr=1", "value2":"path c:\nord\tem\orme\test.exe"}'
a_dict = json.loads(a_string) # desired result a_dict = {"value1":"^stack.*/overflo\w$arr=1", "value2":"path c:\nord\tem\orme\test.exe"}
uj5u.com熱心網友回復:
首先,正則運算式(簡稱“regex”)不是背景關系語法,因此它無法區分一對大括號內的星號(“*”)是否需要保留,而其他的必須洗掉。正則運算式平等對待每個字符。
如果多余的字符(這里:星號)只出現在 json-like 字串的開頭和結尾,并且你知道兩端都有兩個,你可以使用切片來實作你的目標:
a_string = '**{"key1":"value1","key2":"value2"}**'
json_string = a_string[2:len(a_string)-2] # shortly: a_string[2:-2]
d = json.loads(json_string)
print(d)
#>>> {"key1":"value1","key2":"value2"}
uj5u.com熱心網友回復:
您可以使用生成器,如下所示:
original_String = "John - 10 , Rick - 20, Sam - 30"
result = dict((a.strip(), int(b.strip()))
for a, b in (element.split('-')
for element in original_String.split(', ')))
原始字串是 John - 10 , Rick - 20, Sam - 30
結果字典是: {'John': 10, 'Rick': 20, 'Sam': 30}
uj5u.com熱心網友回復:
如果您可以洗掉**字串的第一個和結尾,則可以使用此標準 python 包將任何類似于字典的字串轉換為有效的字典。
>>> import ast
>>> a_string = r'{"value1":"\^stack\.\*/overflo\\w\$arr=1", "value2":"path c:\nord\tem\orme\test.exe"}'
>>> a_dict = ast.literal_eval(a_string)
>>> a_dict
{'value1': '\\^stack\\.\\*/overflo\\w\\$arr=1', 'value2': 'path c:\nord\tem\\orme\test.exe'}
python檔案:https ://docs.python.org/3/library/ast.html#ast.literal_eval
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471981.html
標籤:Python python-3.x 字典
下一篇:如何防止字典中的元素不斷更新?
