如何递归迭代复杂的python对象?

2024-04-25 05:40:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个物体:

et = {  
    "applications": [
        {
        "applications_application": 'value',
        "application_journalNumber": 'value',
        "appParticipants": [
            {
                "appParticipant_inn": "value",
                "appParticipant_kpp": "value",
                "legalForm_code": "value"
            }
            ]
        }
    ]
}

我需要递归地遍历它的所有键。我该怎么做?我想得到这样的东西:

applications
applications_application
application_journalNumber
appParticipants
appParticipant_inn
appParticipant_kpp
legalForm_code

我的无效解决方案:

def myprint(d):
    for k, v in d.items():
      if isinstance(v, dict):
        myprint(v)
      else:
        if isinstance(v, list):
            myprint(v[0])

另外,每个数组中只有一个项目。你知道吗


Tags: ifapplicationvaluecodeet物体isinstanceapplications
3条回答

怎么样:

def traverse_dict(d):
    keys = []
    for key, item in d.items():
        keys.append(key)
        if isinstance(item, dict):
            keys.extend(traverse_dict(item))
        elif isinstance(item, list):
            for d in item:
                keys.extend(traverse_dict(d))
    return keys

你离一个可行的解决方案不远了,我可以建议你:

def myprint(d):
    # print("Handling %s" % d)  # Debug logging

    # This is the end condition on which you actually print the entry
    if not isinstance(d, dict):
        print("Entry: %s" % d)
    else:
        for k, v in d.items():
            # print("Handling key: %s - value: %s" % (k, v))  # Debug logging
            if isinstance(v, list):
                myprint(v[0])
            else:
                myprint(k) # replace by myprint(v) to show the values 

它将以内联方式打印字典中找到的所有值。你知道吗

输出如下:

Entry: applications_application
Entry: application_journalNumber
Entry: appParticipant_inn
Entry: appParticipant_kpp
Entry: legalForm_code

可以对生成器使用递归:

def _keys(d):
  for a, b in d.items():
    yield a
    if isinstance(b, dict):
      yield from _keys(b)
    if isinstance(b, list):
      for i in b:
         yield from _keys(i)


et = {'applications': [{'applications_application': 'value', 'application_journalNumber': 'value', 'appParticipants': [{'appParticipant_inn': 'value', 'appParticipant_kpp': 'value', 'legalForm_code': 'value'}]}]}
print('\n'.join(_keys(et)))

输出:

applications
applications_application
application_journalNumber
appParticipants
appParticipant_inn
appParticipant_kpp
legalForm_code

相关问题 更多 >