【问题标题】:Python Navigate Through Nested List Like TreePython 像树一样通过嵌套列表导航
【发布时间】:2013-11-23 16:17:55
【问题描述】:

这实际上是来自this question的后续问题。

Paul McGuire 提供的解决方案帮助我找到了一个更好的方案,即数据采用 Pythonic 格式 - “嵌套列表”。我之前有一些使用 BeautifulSoup 的经验并查看了嵌套列表,我想知道可能有一种方法可以导航嵌套列表,就像在 HTML 树中导航一样。

有几个posts 与我的类似,但我发现我们有不同的期望。

所以我的问题是,假设你有一个这样的嵌套列表:

['DetailResult',
 ['status', ['Status', ['message', None], ['code', '0']]],
 ['searchArgument',
  ['DetailSearchArgument',
   ['reqPartNumber', 'BQ'],
   ['reqMfg', 'T'],
   ['reqCpn', None]]],
 ['detailsDto',
  [['DetailsDto',
    ['summaryDto',
     ['SummaryDto',
      ['PartNumber', 'BQ'],
      ['seMfg', 'T'],
      ['description', 'Fast']]],
    ['packageDto',
     [['PackageDto', ['fetName', 'a'], ['fetValue', 'b']],
      ['PackageDto', ['fetName', 'c'], ['fetValue', 'd']],
      ['PackageDto', ['fetName', 'd'], ['fetValue', 'z']],
      ['PackageDto', ['fetName', 'f'], ['fetValue', 'Sq']],
      ['PackageDto', ['fetName', 'g'], ['fetValue', 'p']]]],
    ['additionalDetailsDto',
     ['AdditionalDetailsDto',
      ['cr', None],
      ['pOptions', None],
      ['inv', None],
      ['pcns', None]]],
    ['partImageDto', None],
    ['riskDto',
     ['RiskDto',
      ['life', 'Low'],
      ['lStage', 'Mature'],
      ['yteol', '10'],
      ['Date', '2023']]],
    ['partOptionsDto',
     [['ReplacementDto',
       ['partNumber', 'BQ2'],
       ['manufacturer', 'T'],
       ['type', 'Reel']]]],
    ['inventoryDto',
     [['InventoryDto',
       ['distributor', 'V'],
       ['quantity', '88'],
       ['buyNowLink', 'https://www...']],
      ['InventoryDto',
       ['distributor', 'R'],
       ['quantity', '7'],
       ['buyNowLink', 'http://www.r.']],
      ['InventoryDto',
       ['distributor', 'RS'],
       ['quantity', '2'],
       ['buyNowLink', 'http://www.rs..']]]]]]]]

如何获取“key”为PackageDto的元素:

['PackageDto', ['fetName', 'a'], ['fetValue', 'b']],
['PackageDto', ['fetName', 'c'], ['fetValue', 'd']],
['PackageDto', ['fetName', 'd'], ['fetValue', 'z']],
['PackageDto', ['fetName', 'f'], ['fetValue', 'Sq']],
['PackageDto', ['fetName', 'g'], ['fetValue', 'p']]

【问题讨论】:

    标签: python list dictionary tree beautifulsoup


    【解决方案1】:

    这应该可行:

    def getelements(lst, key, res=None):
        if res is None:
            res = []
        for e in lst:
            if isinstance(e, list):
                if e[0] == key:
                    res.append(e)
                else:
                    getelements(e, key, res)
        return res
    

    测试(l 是您的列表):

    res = getelements(l, 'PackageDto')
    for n, e in enumerate(res):
        print(n, e)
    

    产量

    0 ['PackageDto', ['fetName', 'a'], ['fetValue', 'b']]
    1 ['PackageDto', ['fetName', 'c'], ['fetValue', 'd']]
    2 ['PackageDto', ['fetName', 'd'], ['fetValue', 'z']]
    3 ['PackageDto', ['fetName', 'f'], ['fetValue', 'Sq']]
    4 ['PackageDto', ['fetName', 'g'], ['fetValue', 'p']]
    

    【讨论】:

    • 非常感谢您可以使用递归函数解决问题。
    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多