簡體   English   中英

Python:如何刪除字典中的符號?

[英]Python: How to remove symbol in dict?

我得到一個以字節為單位的xml響應,並由xmltodict解析,如下所示。 由於我需要進一步使用響應,因此我想消除鍵中的所有“ @”。 我嘗試了兩種方法來刪除標志,但仍然無法正常工作。 有什么方法可以刪除登錄字典?

XML response (resp.text): {'HOLDING_QUERY_RESPONSE': OrderedDict([('@LOGIN_ID', '011'), ('@CLIENT_ID', '011'), ('@CHANNEL', 'MB'), ('@SESSION_KEY', '111'), ('RESULT', OrderedDict([('@STATUS', 'OK'), ('BUYING_POWER', '98’),( 'USD_BUYING_POWER', '12'), ('AVAILABLE_MKT_VAL', '110'), ('CASH_HOLDING', OrderedDict([('LINEITEM', [OrderedDict([('@CURRENCY_CODE', 'USD'), ('@AVAILABLE_BAL', '-233'), ('@CASH_BALANCE', '0.00'), ('@CASH_ON_HOLD', '0.00'), ('@UNSETTLED_CASH', '0.00'), ('@ACCRUED_INTEREST', '0.00'), ('@BUY_SOLD_CONSIDERATION', '-233'), ('@EX_RATE', '1'), ('@AVAILABLE_VAL', '6'), ('@AMT', '0.00'), ('@DUE_AMT', '0.00')]),…….)])])]))]))])}

首先嘗試的方法。 錯誤是字典對象沒有屬性'iteritems()'。 如果刪除“ .iteritem()”,它將顯示“值錯誤”:太多值無法解包。

info = {key.replace('@',''): item for key, item in xmltodict.parse(resp.text).iteritems()}
print(info)

第二種嘗試方法將其首先更改為字符串,然后將其轉換回dict。 但是,似乎該字典還沒有通過json.dumps轉換為字符串。

info = json.dumps(resp.text)
info.replace('@','')
to_dict = json.loads(info)
print(to_dict)

嘗試這個:

info = {key.replace('@',''): item for key, item in xmltodict.parse(resp.text).items()}
print(info)

如注釋中所述, xmltodict.parse返回一個字典,在您的情況下,您可能正在使用Python 3,因此請使用.items()屬性訪問字典。

舉個例子:

d = ('@CASH', '0.00'), ('@INTEREST', '0.00'), ('@BUY', '-233'), ('@RATE', '1.000000'), ('@AVAILABLE', '6,228'), ('@AMT', '0.00')
info = {key.replace('@',''): item for key, item in d}

print(info)
>>
{'CASH': '0.00', 'INTEREST': '0.00', 'BUY': '-233', 'RATE': '1.000000', 'AVAILABLE': '6,228', 'AMT': '0.00'}

更新的問題狀態

同樣,如果它是嵌套字典,則必須訪問其值中要替換@的鍵,在更新的示例中,您應該能夠使用xmltodict.parse(resp.text)['HOLDING_QUERY_RESPONSE']

from collections import OrderedDict

#based on your updated data structure
d = OrderedDict([('@CASH', '0.00'), ('@INTEREST', '0.00'), ('@BUY', '-233'), ('@RATE', '1.000000'), ('@AVAILABLE', '6,228'), ('@AMT', '0.00')])
xml_response = {}
xml_response['HOLDING_QUERY_RESPONSE'] = d

xml_response
{'HOLDING_QUERY_RESPONSE': OrderedDict([('@CASH', '0.00'),
              ('@INTEREST', '0.00'),
              ('@BUY', '-233'),
              ('@RATE', '1.000000'),
              ('@AVAILABLE', '6,228'),
              ('@AMT', '0.00')])}

info = {key.replace('@',''):value for key, value in xml_response['HOLDING_QUERY_RESPONSE'].items()}
print(info)

暫無
暫無

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

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