嗨,我想解析一些order_dicts。我有以下错误
ipdb> for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict[elem ]))
*** KeyError: '@xmlns'因此,假设我创建了一个Orderdict,稍后我想要迭代该Orderdict以获得每个项和值。
ipdb >>> from collections import *
ipdb >>> my_orderdict = \
OrderedDict([('codeBook',
OrderedDict([('@xmlns', 'http://www.johndoe.com'),
('@xmlns:xsi',
'http://www.w3.org/2001/XMLSchema-instance'),
('@version', '1.2.2'),
('@ID', '_71M0001XCB-F-1991-novembre'),
('@xml-lang', 'en'),
('@xsi:schemaLocation', 'http://www.johndoe.xsd'),
('stdyDscr',
OrderedDict([('stdyInfo',
OrderedDict([('subject',
OrderedDict([('keyword',
['Chômage',
'Emploi'])]))]))]))]))])
ipdb >>> type(my_orderdict)
<class 'collections.OrderedDict'>
ipdb >>> my_orderdict['codeBook'].keys()
odict_keys(['@xmlns', '@xmlns:xsi', '@version',
'@ID', '@xml-lang', '@xsi:schemaLocation', 'stdyDscr'])我正在创建一个循环来访问每个odict_keys的值
for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict[elem ]))我想要的结果应该是
@xmlns ===> 'http://www.johndoe.com'
@xmlns:xsi ===> 'http://www.w3.org/2001/XMLSchema-instance'
@version ===> 1.2.2
...这样我就可以解析这个命令了。现在我的错误是:
ipdb> for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict[elem ]))
*** KeyError: '@xmlns'所以我无法访问我的第一个orderdict的属性。
发布于 2018-02-25 14:11:29
看起来你的循环没有访问正确的字典。您应该使用:
for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict['codeBook'][elem ]))注意内部循环中的my_orderdict['codeBook']。
基本上:您正在迭代字典my_orderdict['codeBook']的元素,但试图直接访问my_orderdict的值。
希望这能有所帮助!
发布于 2018-02-25 14:14:11
您正在遍历subdict的键:for elem in my_orderdict['codeBook'].keys():,但是在parent-dict:my_orderdict[elem ]上使用这些键需要使用my_orderdict['codeBook'],因此:
In [2]: data = OrderedDict([('codeBook',
...: OrderedDict([('@xmlns', 'http://www.johndoe.com'),
...: ('@xmlns:xsi',
...: 'http://www.w3.org/2001/XMLSchema-instance'),
...: ('@version', '1.2.2'),
...: ('@ID', '_71M0001XCB-F-1991-novembre'),
...: ('@xml-lang', 'en'),
...: ('@xsi:schemaLocation', 'http://www.johndoe.xsd'),
...: ('stdyDscr',
...: OrderedDict([('stdyInfo',
...: OrderedDict([('subject',
...: OrderedDict([('keyword',
...: ['Chômage',
...: 'Emploi'])]))]))]))]))])
In [3]: for elem in data['codeBook']: #note, call to .keys is not necessary
...: print("{0} ===> {1}".format(elem, data['codeBook'][elem]))
...:
@xmlns ===> http://www.johndoe.com
@xmlns:xsi ===> http://www.w3.org/2001/XMLSchema-instance
@version ===> 1.2.2
@ID ===> _71M0001XCB-F-1991-novembre
@xml-lang ===> en
@xsi:schemaLocation ===> http://www.johndoe.xsd
stdyDscr ===> OrderedDict([('stdyInfo', OrderedDict([('subject', OrderedDict([('keyword', ['Chômage', 'Emploi'])]))]))])但是,在这种情况下,您可以只使用items,它遍历键-值对
In [4]: for k, v in data['codeBook'].items():
...: print("{0} ===> {1}".format(k, v))
...:
@xmlns ===> http://www.johndoe.com
@xmlns:xsi ===> http://www.w3.org/2001/XMLSchema-instance
@version ===> 1.2.2
@ID ===> _71M0001XCB-F-1991-novembre
@xml-lang ===> en
@xsi:schemaLocation ===> http://www.johndoe.xsd
stdyDscr ===> OrderedDict([('stdyInfo', OrderedDict([('subject', OrderedDict([('keyword', ['Chômage', 'Emploi'])]))]))])https://stackoverflow.com/questions/48970684
复制相似问题