在词典中解析词典

2024-10-02 18:22:43 发布

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

例如,我在字典中有一个Python字典,它返回JSON对象:

{
    u'BrowseNode': {
        u'Ancestors': {
            u'BrowseNode': {
                u'Ancestors': {
                    u'BrowseNode': {
                        u'Ancestors': {
                            u'BrowseNode': {
                                u'Ancestors': {
                                    u'BrowseNode': {
                                        u'BrowseNodeId': 283155,
                                        u'Name': u'Books'
                                    }
                                },
                                u'BrowseNodeId': 1000,
                                u'IsCategoryRoot': 1,
                                u'Name': u'Subjects'
                            }
                        },
                        u'BrowseNodeId': 75,
                        u'Name': u'Science'
                    }
                },
                u'BrowseNodeId': 14545,
                u'Name': u'Physics'
            }
        },
        u'BrowseNodeId': 226697,
        u'Name': u'Electromagnetism'
    }
}

我想得到“Name”键值,但保留Python对象不变(不转换它或类似对象)

输出应如下所示:

^{pr2}$

谢谢


Tags: 对象namejson字典books键值sciencesubjects
3条回答
def print_name(d):
    name = d.get('Name')
    if name:
        print name
    ancestors = d.get('Ancestors')
    if ancestors:
        print_name(ancestors)

递归打印名称属性。。。在

类似这样的方法也适用于给定的数据,并且不是递归的:

def collect_names( node ):
    names = []
    while True:
        names.append(node[u'Name'])
        try:
            # deeper node
            node = node[u'Ancestors'][u'BrowseNode']
        except KeyError:
            # we are done, no ancestors 
            return names[::-1]

print collect_names(data[u'BrowseNode'])
# >> [u'Books', u'Subjects', u'Science', u'Physics', u'Electromagnetism']

Recursion的经典用例。在

从我的头顶:

  1. 编写一个以字典和列表为参数的函数
  2. 在函数内部迭代字典的所有键
  3. 如果键是“Name”,则将值添加到列表中
  4. 如果不是,并且键的类型值是字典,则调用函数并传递此字典和具有名称的列表
  5. 在函数的末尾,只需返回字典

要获取资料,请致电names = func(baseDict, [])。在

相关问题 更多 >