[英]Recursive function call fails to recurse in AWS Lambda - Python3
我試圖用不同的鍵名遞歸地替換 python 字典鍵,為此我使用 aws lambda 和 api 端點來觸發。 令人驚訝的是遞歸部分由於奇怪的原因而失敗。 相同的代碼在本地工作正常。
檢查了 cloudwatch 日志。 那里沒有顯示錯誤消息。 如果我在這里遺漏任何東西,請告訴我
編輯:與Unable to invoke a recursive function with AWS Lambda和recursive lambda function never seems to run 有關
### function that is called inside lambda_handler
def replace_recursive(data,mapping):
for dict1 in data:
for k,v in dict1.copy().items():
if isinstance(v,dict):
dict1[k] = replace_recursive([v], mapping)
try:
dict1[mapping['value'][mapping['key'].index(k)]] = dict1.pop(mapping['key'][mapping['key'].index(k)])
except KeyError:
continue
return data
## lambda handler
def lambda_handler(events,_):
resp = {'statusCode': 200}
parsed_events = json.loads(events['body'])
if parsed_events:
op = replace_recursive(parsed_events,schema)
resp['body'] = json.dumps(op)
return resp
輸入我通過:
{
"name": "michael",
"age": 35,
"family": {
"name": "john",
"relation": "father"
}
}
在 output 中,嵌套字典中的鍵沒有得到更新。 只有外鍵被修改
由於您正在攝取 JSON,因此您可以使用json.loads
的object_pairs_hook
參數在解析階段進行密鑰替換,以獲得更快、更簡單的體驗。
import json
key_mapping = {
"name": "noot",
"age": "doot",
"relation": "root",
}
def lambda_handler(events, _):
replaced_events = json.loads(
events["body"],
object_pairs_hook=lambda pairs: dict(
(key_mapping.get(k, k), v) for k, v in pairs
),
)
return {
"statusCode": 200,
"body": json.dumps(replaced_events),
}
body = {
"name": "michael",
"age": 35,
"family": {"name": "john", "relation": "father"},
}
print(
lambda_handler(
{
"body": json.dumps(body),
},
None,
)
)
打印出來
{'statusCode': 200, 'body': '{"noot": "michael", "doot": 35, "family": {"noot": "john", "root": "father"}}'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.