【问题标题】:Replace child attribute to parent attibute将子属性替换为父属性
【发布时间】:2022-01-24 21:47:01
【问题描述】:

我可以使用重复键创建 xml 并遵循建议的答案

python dicttoxml same key multiple times

但是当我使用超过 100 万条记录时,它会遇到严重的性能问题。

class Node():
    """
    creating class to convert dictionary to xml
    Returns:
        Node : object which contain child tag name
    """
    __slots__ = ['_name']
    
    def __init__(self, name):
        self._name = name

    def __str__(self):
        return self._name

    def __hash__(self):
        return hash(self._name)

我尝试更新节点类(上图),但没有得到有效的时间改进。

稍后我会转到建议使用默认值的链接,这确实更快,数据处理时间不到 5 分钟

Why is dictionary lookup in Python always slower when using user defined objects as keys?

{ 'data' : { 'check' : {'error' : ['data1', 'data2'] } } }
 <data>
   <check>
    <error>
        <item> data1 </item>
        <item> data2 </item>    
    </error>
   </check>
 </data>

但我正在寻找以下方式的 xml。反正有没有得到以下xml。

<data>
   <check>
    <error> data1 </error>
    <error> data2 </error>
   </check>
 </data>

节点类字典

{'data' : {Node('check') : { Node('error') : "data1", Node('error') : "data2" } } }


with open(fpath, "w") as fxml:
            vio_xml_data = dicttoxml(vio_data)
            dom = parseString(vio_xml_data)
            fxml.writelines(dom.toprettyxml())

【问题讨论】:

标签: python python-3.x


【解决方案1】:

这将返回您正在寻找的内容

from dict2xml import dict2xml

data = {'data':
            {'check':
                 {'error': ["data1", "data2"]}
             }
        }

xml = dict2xml(data)
print(xml)

输出

<data>
  <check>
    <error>data1</error>
    <error>data2</error>
  </check>
</data>

注意:我在这里没有使用您的节点类。只需确保 dict 中的“error”键是值列表即可。

【讨论】:

  • 谢谢,但我越来越喜欢这样了。 data1 data2
  • @user765443 从输出看起来你正在使用dicttoxml。在我的回答中,我使用dict2xml。这不会让您向标签添加属性,也不会过多地格式化 xml 输出,但会为您提供所需的内容。
  • 你刚刚测试过,你用dicttoxml,如果你能用dict2xml就可以解决这个问题。
  • Thx Anu.. 小实用程序,但帮助我解决大问题 thx
猜你喜欢
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2015-02-13
  • 2018-05-30
  • 1970-01-01
相关资源
最近更新 更多