如何使用 python 从 XML 创建嵌套字典?

     2023-02-24     18

关键词:

【中文标题】如何使用 python 从 XML 创建嵌套字典?【英文标题】:How to create nested dictionary from XML using python? 【发布时间】:2019-11-29 05:50:10 【问题描述】:

我正在读取一个 XML 文件并将它的一部分写入 YAML 文件。 例如,在这个 xml 文件中,

<project>


  <scm class="hudson.scm.NullSCM"/>
  <assignedNode>bo1php</assignedNode>
  <canRoam>false</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers>
    <hudson.triggers.TimerTrigger>
      <spec>H * * * *</spec>
    </hudson.triggers.TimerTrigger>
  </triggers>
  <concurrentBuild>false</concurrentBuild>
  <builders>

我只想读取 disabled 值和 spec 值并将其写入 YAML 文件,如下所示: 预期输出:

disabled: 'false'
name: Cancellation_CMT_Tickets
triggers:
  hudson.triggers.TimerTrigger:
    spec: H * * * *

只有当我的结果字典是这种格式时

d = "trigger":"hudson.triggers.TimerTrigger": "spec": "H * * * *"

我可以将它转储到上述格式的 yaml 文件中。我当前的代码如下所示,搜索键作为运行时参数传递

import os, xml.etree.ElementTree as ET
import yaml,sys
tree = ET.parse('test.xml')
root = tree.getroot()

d = 
def xmpparse(root,searchkey):
    for child in root:
        if child.tag == searchkey:
            d[child.tag]=child.text
        elif len(child):
           xmpparse(child,searchkey)
for i in sys.argv:
    xmpparse(root,i)

print(yaml.dump(d, default_flow_style=False))

当前输出:

disabled: 'false'
spec: H * * * *

任何帮助将不胜感激。提前致谢!

【问题讨论】:

对 YAML 了解不多(或任何...),但如果有帮助,我可以将您的字典转换为正确的格式(使用 lxml 库)。 我想要一个嵌套字典,仅用于我需要从 XML 中获取的条目。你能帮我解决这个问题吗?在进行递归操作时,它应该开始将值放入嵌套字典中 如果下面的答案有效,请告诉我。 【参考方案1】:

我相信这至少应该解决嵌套字典的问题;它基于关于如何形成嵌套字典的各种答案(可能还有其他方法):

    import lxml.html as LH

    class NestedDict(dict):
        def __missing__(self, key):
              self[key] = NestedDict()
              return self[key]

    data =     [your xml above]

    doc = LH.fromstring(data)

    for i in doc:
           if i.tag == 'triggers':
                for child in i.getchildren():
                    d = NestedDict()
                    d[i.tag][child.tag][child[0].tag] = i.text_content().strip()

    print(d)

输出:

'triggers': 'hudson.triggers.timertrigger': 'spec': 'H * * * *'

【讨论】:

我忘了提一点,我的代码应该以这样的方式工作,它可以对作为运行时参数传递的 searchKey 进行任何深度。看起来您的解决方案只适用于这个 XML 文件。不过我还没有尝试过。但是 d[i.tag][child.tag][child[0].tag] 在这里你只是用 3 个键进行输入

如何使用熊猫从嵌套字典创建数据框?

】如何使用熊猫从嵌套字典创建数据框?【英文标题】:Howtocreateadataframefromanesteddictionaryusingpandas?【发布时间】:2021-11-2818:42:09【问题描述】:我有以下嵌套字典:dict1=\'a\':1,\'b\':2,\'remaining\':\'c\':3,\'d\':4我想使用pandas创建一个数... 查看详情

Python:从父子值列表创建嵌套字典

...valueischild,secondisparent(0,1),(1,3),(8,7),(3,6),(4,3),(5,3)]输出需要使用这些值创 查看详情

如何在dynamodb,嵌套字典或多个项目中构建数据?(代码片段)

我从自动化测试生成的XML聚合,我在lambda函数中使用python来解析XML并创建dynamoDB项。最后,我需要每个测试的日期运行测试持续时间,并将计算一些基本的统计数据,如mean,stdev等。目前,我使用的是非常扁平的结构:"testName":st... 查看详情

如何从嵌套字典创建多索引数据框?

】如何从嵌套字典创建多索引数据框?【英文标题】:Howtocreateamultiindexdataframefromanesteddictionary?【发布时间】:2021-11-2409:29:53【问题描述】:我有一个嵌套字典,它的第一级键是[0,1,2...],每个键对应的值是这样的:"geometry":"type":... 查看详情

如何使用pyspark从xml的每个嵌套节点创建一个表

】如何使用pyspark从xml的每个嵌套节点创建一个表【英文标题】:Howtocreateatablefromeachnestednodeofanxmlusingpyspark【发布时间】:2020-11-2411:52:26【问题描述】:我有一个嵌套的XML结构如下-<parent><root1detail="something"><IDtype="typeA"&... 查看详情

从嵌套字典结构列表(具有两个级别)创建数据框的 Pythonic 方法是啥?

】从嵌套字典结构列表(具有两个级别)创建数据框的Pythonic方法是啥?【英文标题】:WhatisthepythonicwaytocreateaDataframefromalistofNestedDictionaryStructures(withtwolevels)?从嵌套字典结构列表(具有两个级别)创建数据框的Pythonic方法是什么... 查看详情

从python中的缩进文本文件创建树/深度嵌套的字典

】从python中的缩进文本文件创建树/深度嵌套的字典【英文标题】:Creatingatree/deeplynesteddictfromanindentedtextfileinpython【发布时间】:2013-07-2508:51:08【问题描述】:基本上,我想遍历一个文件并将每一行的内容放入一个深度嵌套的字... 查看详情

如何从具有元组集和列表的现有字典创建嵌套字典

】如何从具有元组集和列表的现有字典创建嵌套字典【英文标题】:Howtocreateanesteddictionaryfromexistingdictionarywithsetandlistoftuples【发布时间】:2020-07-1923:26:54【问题描述】:我已经解析了一个midi文件,并且我已经成功地得到了一个... 查看详情

Python从嵌套字典中提取正确的数据

...eddictionary【发布时间】:2021-10-2922:37:12【问题描述】:我使用sqlite3创建了一个名为“entities_data”的数据库importsqlite3conn=sqlite3.connect(\'entities_data.sqlite\')cur=conn.cursor()cur. 查看详情

从嵌套字典创建单个字典以更新 MySQLdb

...teMySQLdb【发布时间】:2017-11-0913:10:45【问题描述】:我是python新手,在尝试将嵌套字典中的数据插入MySQLdb时遇到了问题。我有一本看起来像这样的字典,但要长得多,并且长度可以变化。d=\'Object_a\':\'parameter_1\':\ 查看详情

从嵌套字典创建 Spark DataFrame

...希望在推断嵌套字典的架构时从中创建一个sparkDataFrame。使用sqlContext.createDataFrame(ds).printSchema()为 查看详情

如何使用 Python 访问嵌套字典中的字符串数据 [关闭]

】如何使用Python访问嵌套字典中的字符串数据[关闭]【英文标题】:HowtoaccesstringdatainnesteddictionarywithPython[closed]【发布时间】:2020-11-1109:31:31【问题描述】:从RPC-Server我得到以下响应:"jsonrpc":"2.0","result":"errorMessage":"\'DUT\':1\'IMEI\'... 查看详情

从熊猫数据框创建嵌套字典

...数据框,我想从中提取信息并创建一个嵌套字典以供下游使用,但是,我还不太擅长使用pandas,我需要一些帮助!我的数据框看起来像这样:SequenceA_startA_stopB_startB_stop0sequence_1125261001seq 查看详情

如何使用键路径从嵌套的字典dart中获取值。(代码片段)

我想知道如何获得嵌套字典的值或使用dart(Flutter)中的keypath来更新嵌套字典的值。答案如果你有一个这样的字典。"example":"a":"valA","b":"valB","c":"valC",你可以创建一个类来解析这个对象。classExampleStringa;Stringb;Stringc;Example(this.a,this.b,th... 查看详情

如何使用键路径从嵌套的字典dart中获取值。(代码片段)

我想知道如何获得嵌套字典的值或使用dart(Flutter)中的keypath来更新嵌套字典的值。答案如果你有一个这样的字典。"example":"a":"valA","b":"valB","c":"valC",你可以创建一个类来解析这个对象。classExampleStringa;Stringb;Stringc;Example(this.a,this.b,th... 查看详情

从嵌套列表创建字典 [重复]

...望将2元素列表的列表转换为字典。请注意,我确实不想使用与简单转换为dict相比具有不同结果的group_by。这可能吗?不支持两种最明显的尝试方式:d=xforxin[[1,2],[3,4]]这给了我们:TypeError:unhashable 查看详情

如何从 Python Pandas Dataframe 中的 STRING 列中提取嵌套字典?

】如何从PythonPandasDataframe中的STRING列中提取嵌套字典?【英文标题】:HowtoextractanesteddictionaryfromaSTRINGcolumninPythonPandasDataframe?【发布时间】:2021-03-0107:31:15【问题描述】:有一张表,其列event的一个数据点如下所示:\'事件是一个... 查看详情

python如何建立多层字典(代码片段)

使用字典的get方法使用字典的底层方法get设置默认值为一个空字典,即可创建下层字典:a=a["testkey"]=a.get("testkey",) 优点是不需要导入其他包;缺点是拓展性太差,几乎只能用在二层字典的创建上,层数越多,代码量越大。&nbs... 查看详情