好友
阅读权限 10
听众
最后登录 1970-1-1
We.
发表于 2020-9-7 21:27
本帖最后由 We. 于 2020-9-24 20:26 编辑
如题,
我已经通过遍历字典得到了我想要的东西了。也能print出来,但是为什么return是none????
另外求助各位大佬,
遍历json格式的字典还有更简单的方法吗?
=========================================
2020/9/8
现在问题弄明白了,就是函数中递归返回值的问题。查阅了一下资料如下:
return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),
默认返回None。None是一个特殊的值,它的数据类型是NoneType。NoneType是Python的特殊类型,它只有一个取值None。
它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。。。
1》当函数没有显式return,默认返回None值2》当递归函数有return时,在递归的地方也要return,不然永远返回的是None
但是怎么改还是没有头绪。
========================================
2020/9/9
忘了把代码贴出来。
[Python] 纯文本查看 复制代码
def xyz(data):
if isinstance(data, dict):
for j,k in data.items():
if 'appliesTo' == j:
print(k)
return k
elif isinstance(k,list):
for i in range(len(k)):
if isinstance(k[i], dict):
xyz(k[i])
elif isinstance(k,dict):
xyz(k)
w = xyz(data)
print(w)
这是原来的代码。
根据提示修改过后。
[Python] 纯文本查看 复制代码
def xyz(data):
if isinstance(data, dict):
for j,k in data.items():
if 'appliesTo' == j:
print(k)
return k
elif isinstance(k,list):
for i in range(len(k)):
if isinstance(k[i], dict):
return k[i]
xyz(k[i])
elif isinstance(k,dict):
return k
xyz(k)
输出结果是:
[Python] 纯文本查看 复制代码
{'combinedUnitEntitlement': {'activeWarrantyEntitlement': None, 'overallWarrantyStartDate': None, 'overallWarrantyEndDate': None, 'activeContractEntitlement': None, 'overallContractStartDate': None, 'overallContractEndDate': None, 'oos': {'ossKey': None, 'oosType': 'BD-ND5200-G2-8SFF', 'serialNumber': '21025A2E53', 'salesOrderNumber': '', 'shipToCountry': 'CN', 'shipFromCountry': 'CN', 'omSystemDesc': None, 'salesChannel': None, 'product': {'productId': '0235A2E8', 'productNumber': None, 'productDesc': '装配组件-H3C NaviData 5200 G2 8SFF-BDAZ2ND5200-CTO大数据一体机-国内版', 'productLineCode': 'NAVI', 'productLineDesc': None, 'functionalLocation': None}, 'oosCategory': 'H3C', 'snConverter': 0, 'mappingSerialNumber': '', 'projectName': ''}, 'warrantyList': [{'warrantyType': None, 'termCode': None, 'portfolioFlag': None, 'warrantyDeterminationCode': None, 'warrantyDeterminationDescription': None, 'warrantyStartDate': None, 'gracePeriod': None, 'global': None, 'installationIncluded': None, 'sitePreparation': None, 'warrantyExtension': None, 'offerList': [{'id': '1312692416', 'offerCode': '8813A04X', 'offerDesc': '基本维保5x10xNBD发出', 'svcProductType': None, 'svcProductLine': None, 'standAloneOffer': 'Factory Warranty', 'incidentBaseOffer': None, 'serviceQuantity': None, 'availableQuantity': None, 'modiferList': [], 'deliverableList': [], 'appliesTo': {'startDate': '2018-09-15', 'endDate': '2021-12-14', 'status': 'A', 'acticeAppliesTo': '', 'oosKey': ''}, 'pkgOffer': None}]}], 'contractList': [], 'locationList': [], 'contactList': []}, 'productList': None, 'esHeader': {'transactionId': None, 'warnings': {'eiaErrorList': None}}, 'apiError': None}
明显有问题,原理大概是知道了 ,问题出在我没有理解递归是怎么return的。请指教
=====================================================
2020/9/24
问题解决了,忘了回来补充了。
解决方案就是:
在函数中传入一个新的列表参数,然后在return的地方把想要的值赋给传参,然后去打印列表就OK了。
这个方法是从别人那里学来的。
感觉不是一个很好的方案,如果有人需要代码的话评论告诉我吧。
没有的话我就偷懒啦。