Python 如何在OrderedICT中迭代OrderedICT
嗨,我想解析一些订单。我有以下错误Python 如何在OrderedICT中迭代OrderedICT,python,python-3.x,ordereddictionary,Python,Python 3.x,Ordereddictionary,嗨,我想解析一些订单。我有以下错误 ipdb> for elem in my_orderdict['codeBook'].keys(): print("{0} ===> {1}".format(elem, my_orderdict[elem ])) *** KeyError: '@xmlns' 假设我创建了一个Orderdict,我想稍后迭代它来获取每个项和值 ipdb >>> from collections import * ipdb &
ipdb> for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict[elem ]))
*** KeyError: '@xmlns'
假设我创建了一个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'])
我想要的结果应该是
@xmlns ===> 'http://www.johndoe.com'
@xmlns:xsi ===> 'http://www.w3.org/2001/XMLSchema-instance'
@version ===> 1.2.2
...
这样我就可以解析这个orderdict了。现在我的错误是:
ipdb> for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict[elem ]))
*** KeyError: '@xmlns'
因此,我无法访问第一个orderdict的属性。看起来您的循环没有访问正确的字典。您应该使用:
for elem in my_orderdict['codeBook'].keys():
print("{0} ===> {1}".format(elem, my_orderdict['codeBook'][elem ]))
注意内部循环中的my_orderdict['codeBook']
基本上:您正在迭代字典my_orderdict['codeBook']
的元素,但试图直接访问my_orderdict
的值
希望这有帮助 您正在迭代子目录的键:
用于my_orderdict['codeBook']中的元素。键():
但是在父目录上使用这些键: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'])]))]))])
但是,在这种情况下,您可以只使用项
,它在键值对上进行迭代:
谢谢你的回答!
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'])]))]))])
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'])]))]))])