例如,我在字典中有这个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对象(不转换它或类似)
输出应该是这样的:
Books, Subjects, Science, Physics, Electromagnetism
由于
答案 0 :(得分:2)
这样的东西也适用于给定的数据而且不是递归的:
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']
答案 1 :(得分:1)
def print_name(d):
name = d.get('Name')
if name:
print name
ancestors = d.get('Ancestors')
if ancestors:
print_name(ancestors)
递归打印名称属性......
答案 2 :(得分:1)
Recursion的经典用例。
从头到尾:
要打电话给names = func(baseDict, [])
。