簡體   English   中英

Python python中如何將帶特殊字符的字符串轉成dict

[英]Python How to convert string with special characters into a dict in python

我正在嘗試將字符串轉換為有效的字典。

例如字符串:

'{"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"}

首先,正則表達式(簡稱“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"}

您可以使用生成器,如下所示:

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}

如果可以刪除字符串開頭和結尾的** ,則可以使用此標准 python package 將任何類似於字典的字符串轉換為有效字典。

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

暫無
暫無

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

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