2016-07-05 37 views
2

我使用的是OrderedDict這樣的:如何處理OrderedDict與循環Python中的一個條目?

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 -names在VAR foo

我該怎麼做才能使for循環能夠像使用多項數據對象一樣處理單項數據對象?

回答

1

在第一個示例中,您使用的是OrderedDicts的列表,而在第二種情況下,您使用的是單個OrderedDict對象。

因此,在第一種情況下,從每一個在mydata對象fooOrderedDict對象,並且可以使用foo['key']訪問您的數據,但在第二個例子中,foo是從字典裏,這是一個字符串的關鍵。

您應該檢查是否在第二種情況下,你真的有一個列表,而不是一個單一的對象處理。

1

在你的OrderedDict列表中的第一種情況,並在第二隻是一個OrderedDict。爲了讓你的循環工作:

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

它創建一個列表OrderedDict與1個元素。

+0

THX雅克,我的問題是,wheter我得到的情況下,A或情況B,我有數據「爲」我的'my_data'-VAR我無法控制。有沒有辦法來改變my_data與一個OrderedDict進入名單? – Produnis

+1

你可以做'如果不是isinstance(my_data,列表):my_data = my_data]'然後。 –