我有這樣的字串:
[KEY1=ABC, KEY2=ABC, ... , KEY3={KEY123=ABC, KEY456=ABC}, KEY111=ABC, KEY4=KEY=VALUE&KEY=VALUE&KEY=VALUE]
我想把它決議成這樣的python dict
dict = {
'KEY1': 'ABC',
'KEY2': 'ABC',
'KEY3': '{KEY123=ABC, KEY456=ABC}',
'KEY111': 'ABC',
'KEY4': 'KEY=VALUE&KEY=VALUE&KEY=VALUE',
}
請注意,這些值可以包含復雜/特殊字符,例如/\-@'"
在“KEY4”的情況下;它可以像一個 URL GET String 格式。例子
KE4=id=1&username=xx&url=http://xxx...&ref=1
以下代碼部分有效。它不決議包含嵌套 key=val 的值。像上面的'KEY3'
dict = builtins.dict(re.findall(r'(\S )=(".*?"|\S )', input))
uj5u.com熱心網友回復:
我把你的(稍微編輯過的)正則運算式放在一個函式中,你可以呼叫字典值來轉換字典中的嵌套字串:
import re
import json
input_str = "[KEY1=ABC, KEY2=ABC, KEY3={KEY123=ABC, KEY456=ABC}, KEY111=ABC]"
def dict_from_str(s):
return dict(re.findall(r'(\w )=([^{]*?|\{.*?})(?:,|$)', s.strip('[]{}')))
dict_out = dict_from_str(input_str)
for k, v in dict_out.items():
if '=' in v:
dict_out[k] = dict_from_str(v)
print(json.dumps(dict_out, indent=4))
輸出:
{
"KEY1": "ABC",
"KEY2": "ABC",
"KEY3": {
"KEY123": "ABC",
"KEY456": "ABC"
},
"KEY111": "ABC"
}
如果您有更多級別,您可以考慮撰寫一個遞回函式。
編輯:您可以單獨處理 URL(請注意,鍵必須是唯一的,與您的第一個示例不同):
input_str = "[KEY1=ABC, KEY2=ABC, KEY3={KEY123=ABC, KEY456=ABC}, KEY111=ABC, KEY4=KEY=VALUE&KEY2=VALUE&KEY3=VALUE]"
def dict_from_str(s):
return dict(re.findall(r'(\w )=([^{]*?|\{.*?})(?:,|$)', s.strip('[]{}')))
def dict_from_url(s):
return dict(re.findall(r'(\w )=([^=]*?)(?:&|$)', s.strip('[]{}')))
dict_out = dict_from_str(input_str)
for k, v in dict_out.items():
if '&' in v:
dict_out[k] = dict_from_url(v)
elif '=' in v:
dict_out[k] = dict_from_str(v)
print(json.dumps(dict_out, indent=4))
輸出:
{
"KEY1": "ABC",
"KEY2": "ABC",
"KEY3": {
"KEY123": "ABC",
"KEY456": "ABC"
},
"KEY111": "ABC",
"KEY4": {
"KEY": "VALUE",
"KEY2": "VALUE",
"KEY3": "VALUE"
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/484548.html
上一篇:如何使用Selenium和Python抓取GooglePeopleAlsoAsk的問題和答案,以獲得超過Google默認輸出的數量?
下一篇:創建公司新聞故事和匹配日期的串列
