字典键和值意外地翻转自己

时间:2016-10-14 20:15:03

标签: python xml

我正在运行python 3.5,并且我已经定义了一个创建XML子元素并将它们添加到另一个元素下的函数。属性在字典中,但由于某种原因,当我执行脚本时,字典键和值有时会翻转。

以下是我所拥有的一些片段(代码被分解为许多功能,因此我将它组合在一起)

import xml.etree.ElementTree as ElementTree

def AddSubElement(parent, tag, text='', attributes = None):
    XMLelement = ElementTree.SubElement(parent, tag)
    XMLelement.text = text
    if attributes != None:
        for key, value in attributes:
            XMLelement.set(key, value)
    print("attributes =",attributes)
    return XMLelement

descriptionTags = ([('xmlns:g' , 'http://base.google.com/ns/1.0')])
XMLroot = ElementTree.Element('rss')
XMLroot.set('version', '2.0')
XMLchannel = ElementTree.SubElement(XMLroot,'channel')
AddSubElement(XMLchannel,'g:description', 'sporting goods', attributes=descriptionTags )
AddSubElement(XMLchannel,'link', 'http://'+ domain +'/')
XMLitem = AddSubElement(XMLchannel,'item')  
AddSubElement(XMLitem, 'g:brand', Product['ProductManufacturer'], attributes=bindingParam)
AddSubElement(XMLitem, 'g:description', Product['ProductDescriptionShort'], attributes=bindingParam)
AddSubElement(XMLitem, 'g:price', Product['ProductPrice'] + ' USD', attributes=bindingParam)

密钥和价值确实会被切换!因为我有时会在控制台中看到这个:

attributes = [{'xmlns:g', 'http://base.google.com/ns/1.0'}]
attributes = [{'http://base.google.com/ns/1.0', 'xmlns:g'}]
attributes = [{'http://base.google.com/ns/1.0', 'xmlns:g'}]
...

以下是有时出现的xml字符串:

<rss version="2.0">
<channel>
    <title>example.com</title>
    <g:description xmlns:g="http://base.google.com/ns/1.0">sporting goods</g:description>
    <link>http://www.example.com/</link>
    <item>
        <g:id http://base.google.com/ns/1.0="xmlns:g">8987983</g:id>
        <title>Some cool product</title>
        <g:brand http://base.google.com/ns/1.0="xmlns:g">Cool</g:brand>
        <g:description http://base.google.com/ns/1.0="xmlns:g">Why is this so cool?</g:description>
        <g:price http://base.google.com/ns/1.0="xmlns:g">69.00 USD</g:price>
        ...

是什么原因导致翻转?

1 个答案:

答案 0 :(得分:3)

attributes = [{'xmlns:g', 'http://base.google.com/ns/1.0'}]

这是一个包含集合的列表,而不是字典。订购和字典都没有订购。