Ich habe eine Funktion, die einen Schlüssel übernimmt und geschachtelte Dicts durchläuft, um den Wert unabhängig von seiner Tiefe zurückzugeben. Ich kann jedoch nur den Wert zum Drucken erhalten, nicht zurückgeben. Ich habe die anderen Fragen zu diesem Thema gelesen und habe versucht 1. Ertrag zu implementieren 2. den Wert an eine Liste anzufügen und dann die Liste zurückzugeben.Rekursive Funktion druckt, gibt aber keine zurück
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
Beispieldaten:
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')]))]))]))])
Wenn ich ausführen, um den gewünschten Wert druckt, aber nicht zurück:
>>>52c7e94b-dc76-2dd6-1216-f147d991d6c7
>>>None
Was geschieht? Warum bricht die Funktion nicht ab und gibt den Wert zurück, wenn sie gefunden wird?
Sie müssen in Ihrer 'else' Klausel zurückgeben. – AChampion
@AChampion Ich versuchte das- noch gibt 'None' zurück, und druckt nicht einmal den Wert –
Lesen Sie hierzu: http://StackOverflow.com/Questions/11356168/Return-in-Recursive-Funktion – MYGz