我有一个函数,它接受一个键并遍历嵌套的字典,无论其深度如何,都会返回该值。但是,我只能得到打印的价值,而不是返回。我已阅读关于此问题的其他问题,并已尝试1.实现yield 2.将值附加到列表中,然后返回列表。递归函数打印但不返回
def get_item(data,item_key):
# data=dict, item_key=str
if isinstance(data,dict):
if item_key in data.keys():
print data[item_key]
return data[item_key]
else:
for key in data.keys():
# recursion
get_item(data[key],item_key)
item = get_item(data,'aws:RequestId')
print item
的样本数据:
data = OrderedDict([(u'aws:UrlInfoResponse', OrderedDict([(u'@xmlns:aws', u'http://alexa.amazonaws.com/doc/2005-10-05/'), (u'aws:Response', OrderedDict([(u'@xmlns:aws', u'http://awis.amazonaws.com/doc/2005-07-11'), (u'aws:OperationRequest', OrderedDict([(u'aws:RequestId', u'4dbbf7ef-ae87-483b-5ff1-852c777be012')])), (u'aws:UrlInfoResult', OrderedDict([(u'aws:Alexa', OrderedDict([(u'aws:TrafficData', OrderedDict([(u'aws:DataUrl', OrderedDict([(u'@type', u'canonical'), ('#text', u'infowars.com/')])), (u'aws:Rank', u'1252')]))]))])), (u'aws:ResponseStatus', OrderedDict([(u'@xmlns:aws', u'http://alexa.amazonaws.com/doc/2005-10-05/'), (u'aws:StatusCode', u'Success')]))]))]))])
当我执行,所需的值可以打印,但不会返回:
>>>52c7e94b-dc76-2dd6-1216-f147d991d6c7
>>>None
这是怎么回事?为什么函数没有找到它并返回值呢?
你必须在'else'子句中返回''。 – AChampion
@AChampion我试过 - 仍然返回'无',甚至没有打印出值 –
阅读此:http://stackoverflow.com/questions/11356168/return-in-recursive-function – MYGz