我正在使用这样的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
循环以与多项数据对象相同的方式对单项数据对象起作用?
答案 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
列表。