python - Python:如何删除字典中的符号?
问题描述
我得到一个以字节为单位并由 xmltodict 解析的 xml 响应,如下所示。由于我需要进一步使用响应,因此我想消除键中的所有'@'。我尝试了两种删除标志的方法,但仍然无法正常工作。有什么方法可以删除字典中的登录吗?
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')]),…….)])])]))]))])}
第一次尝试的方法。错误是 dict 对象没有属性“iteritems()”。如果我删除 '.iteritem()',它会显示 Value Error: too many value to unpack。
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)
推荐阅读
- javascript - 更改后选择下拉值消失
- asp.net-core - 即使在 .NetCore API 中启用 CORS 后也会出现 CORS 错误
- applescript - 查找并替换 AppleScript 不写入文件
- html - 用户使用电子邮件而不是用户名登录。问题:通过电子邮件但检查用户名
- excel - 通过标题识别列并将数据粘贴到匹配的列中
- amazon-web-services - 如何读取 AWS CLI 命令响应
- python - Python:为什么我不能对集合进行算术运算
- html - 如何在引导程序中设置导航链接到当前页面
- linux - 如何使用 AWK 从文件中连续输出行
- swift - 有没有办法改变 UITabBar 或 UITabBarItem 中的图像位置?