2

将 xml 文件解析为 Python ElementTree 时,属性的顺序会混淆,因为 Python 将属性存储在字典中。

如何更改字典中属性的顺序?

4

4 回答 4

6

XML 属性根据定义是无序的1,比较官方标准的第 3.1 段。

1从技术上讲,属性列表是有序的,但顺序并不重要,即编写器、转换器和解析器可以随意切换。

于 2011-03-21T17:31:44.473 回答
2

你的自我回答就像你说的那样冗长而繁琐。它不需要。如果(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
>>>
于 2011-03-25T05:18:07.930 回答
0

XML 没有定义节点属性的任何顺序。所以行为很好。如果您对属性的顺序做出假设,那么您的假设是错误的。没有排序,您不能期望任何类型的属性排序。所以你的问题是无效的。

于 2011-03-21T17:30:46.877 回答
0

您不能在字典内部更改属性的顺序。除非您进行一些花哨的黑客攻击,否则这是不可能的。

因此,解决方案是按照您想要的顺序手动访问属性,或者创建一个键/项目列表并按照您想要的方式进行排序。

于 2011-03-23T01:33:15.697 回答