嘗試從某個程式決議 xml 請求時,我的架構非常復雜。它是 dict of dict 的 dicts 的 dicts。一些字典還包含字典串列。但是由于結構太不舒服,我的字典包含很多“垃圾”詞,"begin_"而且"value"貫穿其深度。
例如:
<depart>
<BEGIN_>
<id Value=""/>
<code Value=""/>
<name Value=""/>
<declNameList/>
</BEGIN_>
</depart>
已經轉變為
{'depart': {'BEGIN_': {'id': {'Value': ''},
'code': {'Value': ''},
'name': {'Value': ''},
'declNameList': None}}}}}
我需要:
{'depart': {'id': '',
'code': '',
'name': '',
'declNameList': None}}
你可以幫助我使用全深度遞回洗掉這個垃圾嗎?目前,我設法轉換h = {'status': {'BEGIN_': {'statusCode': {'Value': '0'}}}}到{'status': {'statusCode': {'Value': '0'}}}使用:
if 'Value' in h['status'].keys():
h['status'] = h['status']['Value']
if 'BEGIN_' in h['status'].keys():
h['status'] = h['status']['BEGIN_']
但是我需要將這種過濾器應用于整個字典。
uj5u.com熱心網友回復:
如評論中所述,如果可以的話,在決議 XML 期間解決問題將是可取的。否則,我們可以使用帶有佇列的非遞回解決方案來將檔案的每個內部/嵌套元素排入佇列BEGIN_并Value分別洗掉和:
xml_dict = {
'depart': {
'BEGIN_': {
'id1': {'Value': '11'},
'code1': {'Value': '11'},
'name1': {'Value': '11'},
'declNameList1': None
}
},
'BEGIN_': {
"1": [
{
'id2': {'Value': '22'},
'code2': {'Value': '22'},
'name2': {'Value': '22'},
'declNameList2': None
},
{
'id3': {'Value': '33'},
'code3': {'Value': '33'},
'name3': {'Value': '33'},
'declNameList3': None
},
],
"2": [
{
'id4': {'Value': '44'},
'code4': {'Value': '44'},
'name4': {'Value': '44'},
'declNameList4': {
'code5': {'Value': '55'}
},
},
{
'id6': {'Value': '66'},
'code6': {'Value': '66'},
'name6': {'Value': '66'},
'declNameList6': {
'code7': {
'BEGIN_': {
'name8': {'Value': '8'}
}
}
},
},
{
'any1': {'Value': '1'}
},
[
{
"BEGIN_": {
'any2': {'Value': '2'}
},
},
{
"BEGIN_": {
'any3': {'Value': '3'}
},
}
]
]
}
}
queue = [xml_dict]
while queue:
data = queue.pop()
if isinstance(data, dict):
if begin_value := data.pop("BEGIN_", None):
data.update(begin_value)
for key, value in data.items():
if isinstance(value, dict) and value.keys() == {"Value"}:
data[key] = value["Value"]
elif isinstance(value, (dict, list)):
queue.append(value)
elif isinstance(data, list):
for item in data:
if isinstance(item, (dict, list)):
queue.append(item)
print(xml_dict)
輸出
{
"depart": {
"id1": "11",
"code1": "11",
"name1": "11",
"declNameList1": None
},
"1": [
{
"id2": "22",
"code2": "22",
"name2": "22",
"declNameList2": None
},
{
"id3": "33",
"code3": "33",
"name3": "33",
"declNameList3": None
}
],
"2": [
{
"id4": "44",
"code4": "44",
"name4": "44",
"declNameList4": {
"code5": "55"
}
},
{
"id6": "66",
"code6": "66",
"name6": "66",
"declNameList6": {
"code7": {
"name8": "8"
}
}
},
{
"any1": "1"
},
[
{
"any2": "2"
},
{
"any3": "3"
}
]
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314434.html
