【问题标题】:OrderedDict: Unable Return the item of d with key key. Raises a KeyErrorOrderedDict:无法使用键 key 返回 d 的项目。引发 KeyError
【发布时间】:2017-08-16 23:18:04
【问题描述】:

访问 xmltodict 转换的值。我有一个看起来像这样的 xml

<PQ N="E90" RT="TG">
<CASES ASOF_DATE="8/11/2017" CREATE_DATE="8/13/2017" RECORDS="1130" >
<CASE>
<ID>E90</ID>

我正在尝试访问 CASE 字典。如果我删除第二个 XML 行并尝试返回 d[PQ]['CASE'],我会得到想要的结果这是代码:

def convert(xml_file, xml_attribs=True):
    with open(xml_file, "rb") as f:
        d = xmltodict.parse(f, xml_attribs=xml_attribs)
    return (d['FUND'])

d 的输出如下所示:

OrderedDict([(PQ, OrderedDict([('@N', 'E90'), ('@RT', 'TG'), (CASES,   
OrderedDict([('@ASOF_DATE', '8/11/2017'), ('@CREATE_DATE', '8/13/2017'),  

('@RECORDS', '1130'), (CASE, [OrderedDict([('ID, E90), ..... so on

【问题讨论】:

  • CASE在CASES内,因此你需要`d[PQ]['CASES']['CASE']
  • 不是这样的。由于它创建了一个有序字典,它不允许 d[PQ]['CASES']['CASE']。当我返回 d 时,我可以分享输出。这可能会有所帮助
  • 这就是它的样子。我只需要访问 CASE 有序字典。
  • @stovfl。你能帮忙吗?
  • return (d[PQ][CASES][CASE]) KeyError: CASES

标签: python python-3.x xmltodict


【解决方案1】:

问题:无法用key key返回d的item。引发 KeyError。
我正在尝试访问 CASE 字典。


数据:

od['PQ'] = \
    OrderedDict({'@N':"E90", '@RT':"TG", 'CASES':
        OrderedDict({'ASOF_DATE':"8/11/2017", 'CREATE_DATE':"8/13/2017", 'RECORDS':"1130", 'CASE':
            OrderedDict({'ID':'E90'})})})
print(od['PQ'])
>>> OrderedDict([('@N', 'E90'), ('@RT', 'TG'), ('CASES', OrderedDict([('ASOF_DATE', '8/11/2017'), ('CREATE_DATE', '8/13/2017'), ('RECORDS', '1130'), ('CASE', OrderedDict([('ID', 'E90')]))]))])

print(od['PQ']['CASES'])
>>> OrderedDict([('ASOF_DATE', '8/11/2017'), ('CREATE_DATE', '8/13/2017'), ('RECORDS', '1130'), ('CASE', OrderedDict([('ID', 'E90')]))])

print(od['PQ']['CASES']['CASE'])
>>> OrderedDict([('ID', 'E90')])

print(od.get('PQ').get('CASES').get('CASE'))
>>> OrderedDict([('ID', 'E90')])

print('list(od[\'PQ\'])[2] {}'.format(list(od['PQ'].values())[2]))
>>> list(od['PQ'])[2] OrderedDict([('ASOF_DATE', '8/11/2017'), ('CREATE_DATE', '8/13/2017'), ('RECORDS', '1130'), ('CASE', OrderedDict([('ID', 'E90')]))])

for kv in list(od['PQ'].values()):
    print('od[\'PQ\'].values {}'.format(kv))

>>> od['PQ'].values E90
>>> od['PQ'].values TG
>>> od['PQ'].values OrderedDict([('ASOF_DATE', '8/11/2017'), ('CREATE_DATE', '8/13/2017'), ('RECORDS', '1130'), ('CASE', OrderedDict([('ID', 'E90')]))])

for k,v in od.items():
    print('items(od) {}:{}'.format(k,v))

>>> items(od) PQ:OrderedDict([('@N', 'E90'), ('@RT', 'TG'), ('CASES', OrderedDict([('ASOF_DATE', '8/11/2017'), ('CREATE_DATE', '8/13/2017'), ('RECORDS', '1130'), ('CASE', OrderedDict([('ID', 'E90')]))]))])

用 Python 测试:3.4.2

【讨论】:

猜你喜欢
  • 2018-06-23
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
相关资源
最近更新 更多