【问题标题】:How to handle OrderedDict with one entry in Python for loop?如何在 Python for 循环中使用一个条目来处理 OrderedDict?
【发布时间】:2016-11-07 16:18:55
【问题描述】:

我正在使用这样的 OrderedDict:

my_data = [OrderedDict([(u'@pageid', u'1108'), (u'@ns', u'0'), (u'@title', u'H\xf6rspiele f\xfcr Studenten')]), OrderedDict([(u'@pageid', u'989'), (u'@ns', u'0'), (u'@title', u'Impact')]), OrderedDict([(u'@pageid', u'580'), (u'@ns', u'0'), (u'@title', u'Impfgegner')]), OrderedDict([(u'@pageid', u'990'), (u'@ns', u'0'), (u'@title', u'MESH')]), OrderedDict([(u'@pageid', u'502'), (u'@ns', u'0'), (u'@title', u'Publikationen')])]

如果我使用for 循环遍历这个对象,一切都会按预期工作:

for foo in mydata:
 print(foo['@pageid'])
 print(foo['@ptitle'])

但是,我的问题是: 如果 OrderedDict 只包含一个条目,例如:

OrderedDict([(u'@pageid', u'328'), (u'@ns', u'0'), (u'@title', u'UWE')])

我的for 循环将失败:

for foo in mydata:
print(foo['@pageid'])

TypeError: string indices must be integers

...因为 for 循环不再给出 foo 和几个 ['ATTRIBUTE'],而是在 var foo 中写入所有 attribute-names。

我该怎么做才能使for 循环以与多条目数据对象相同的方式在单条目数据对象上工作?

【问题讨论】:

    标签: python arrays python-2.7 for-loop


    【解决方案1】:

    在第一种情况下,您有一个OrderedDict 的列表,而在第二种情况下,您有一个OrderedDict 的列表。为了让你的 for 循环正常工作:

     my_data = [OrderedDict([(u'@pageid', u'328'), (u'@ns', u'0'), (u'@title', u'UWE')])]
    

    创建一个包含 1 个元素的 OrderedDict 列表。

    【讨论】:

    • 谢谢 Jacques,我的问题是,我无法控制我得到案例 A 还是案例 B,我在 my_data-var 中拥有“原样”的数据。有没有办法将 my_data 转换为具有一个 OrderedDict 条目的列表?
    • 那你就可以if not isinstance(my_data, list): my_data = [my_data]了。
    【解决方案2】:

    在第一个示例中,您使用的是 OrderedDicts 列表,而在第二个示例中,您使用的是单个 OrderedDict 对象。

    因此,在第一种情况下,mydata 中的每个 foo 对象都是 OrderedDict 对象,您可以使用 foo['key'] 访问您的数据,但在第二种情况下,foo 是来自字典,它是一个字符串。

    您应该检查在第二种情况下您是否真的在处理列表而不是单个对象。

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2012-04-22
      • 2021-05-25
      • 2021-08-08
      • 2023-01-05
      • 2013-12-10
      相关资源
      最近更新 更多