这实际上是来自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..']]]]]]]]
如何获取“密钥”为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']]
答案 0 :(得分:2)
这应该有效:
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']]