首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OrderedDict中迭代OrderedDict

如何在OrderedDict中迭代OrderedDict
EN

Stack Overflow用户
提问于 2018-02-25 13:59:14
回答 2查看 2K关注 0票数 1

嗨,我想解析一些order_dicts。我有以下错误

代码语言:javascript
复制
ipdb> for elem in my_orderdict['codeBook'].keys():
          print("{0}  ===> {1}".format(elem, my_orderdict[elem ]))
*** KeyError: '@xmlns'

因此,假设我创建了一个Orderdict,稍后我想要迭代该Orderdict以获得每个项和值。

代码语言:javascript
复制
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的值

代码语言:javascript
复制
for elem in my_orderdict['codeBook'].keys():
    print("{0}  ===> {1}".format(elem, my_orderdict[elem ]))

我想要的结果应该是

代码语言:javascript
复制
@xmlns ===> 'http://www.johndoe.com'
@xmlns:xsi ===> 'http://www.w3.org/2001/XMLSchema-instance'
@version ===> 1.2.2
...

这样我就可以解析这个命令了。现在我的错误是:

代码语言:javascript
复制
ipdb> for elem in my_orderdict['codeBook'].keys():
          print("{0}  ===> {1}".format(elem, my_orderdict[elem ]))
*** KeyError: '@xmlns'

所以我无法访问我的第一个orderdict的属性。

EN

回答 2

Stack Overflow用户

发布于 2018-02-25 14:11:29

看起来你的循环没有访问正确的字典。您应该使用:

代码语言:javascript
复制
for elem in my_orderdict['codeBook'].keys():
    print("{0}  ===> {1}".format(elem, my_orderdict['codeBook'][elem ]))

注意内部循环中的my_orderdict['codeBook']

基本上:您正在迭代字典my_orderdict['codeBook']的元素,但试图直接访问my_orderdict的值。

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2018-02-25 14:14:11

您正在遍历subdict的键:for elem in my_orderdict['codeBook'].keys():,但是在parent-dict:my_orderdict[elem ]上使用这些键需要使用my_orderdict['codeBook'],因此:

代码语言:javascript
复制
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,它遍历键-值对

代码语言:javascript
复制
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'])]))]))])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48970684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档