如何在Python for循环中使用一个条目处理OrderedDict?

时间:2016-07-05 18:16:02

标签: python arrays python-2.7 for-loop

我正在使用这样的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'],而是将所有attribute - 名称写在var foo中。

我能做什么才能使for循环以与多项数据对象相同的方式对单项数据对象起作用?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

在第一种情况下,您有一个OrderedDict列表,而在第二种情况下只有一个OrderedDict。为了让你的for循环工作,请执行以下操作:

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

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