2011-03-21 52 views
2

將XML文件解析爲Python ElementTree時,屬性的順序會混淆,因爲Python會將屬性存儲在字典中。如何在Python中訂購xml元素屬性?

如何更改字典中屬性的順序?

+0

oops。此問題已被詢問:[鏈接](http://stackoverflow.com/questions/2741480/can-elementtree-be-told-to-preserve-the-order-of-attributes) – 2011-03-22 04:22:28

回答

1

你的自我回答正如你所說的那樣漫長而繁瑣。它不需要。如果(1)鍵數超過10個(2)字典的鍵數少於預期,它也會失敗。

試試這個;它的簡單得多:

>>> ordered_keys = ('z', 'y', 'e', 'x', 'w') # possible keys, in desired order 

注:以上線是所有所需的設置。

>>> dic = {'z':'a', 'y':'b', 'x':'c', 'w':'d'} # actual contents of a dictionary 
>>> for k in ordered_keys: 
...  if k in dic: # avoid trouble if a key is missing 
...   print k, dic[k] 
... 
z a 
y b 
x c 
w d 
>>> 
+0

謝謝John!是的,僅僅一天之後,我開始在我的高級代碼中看到許多缺陷。 :\ – 2011-03-26 01:57:28

0

XML沒有定義任何節點屬性的排序。所以行爲很好。 如果你對屬性的排序做出假設,那麼你的假設是錯誤的。 沒有排序,你不能指望任何種類的屬性排序。所以你的問題是無效的。

6

XML屬性被定義無序,比較官方標準的paragraph 3.1

技術上,屬性列表是有序的,但爲了不顯著,即作家,變壓器和解析器是免費的,因爲他們喜歡四處轉了。

0

您無法在字典中更改內部屬性的順序。除非你做一些奇特的黑客攻擊,否則這是不可能的。

因此,解決方案是按照您希望的順序手動訪問屬性,或創建按鍵/項目列表並按照需要的方式進行排序。

+0

「你會看到訂單已經丟失「 - 字典沒有失去的訂單。 – 2011-03-25 05:20:54