我正在尝试用基于用户输入的变量 (function_name) 替换 input
。我试过 replace
但 list
不允许。还有其他方法可以替换它吗?
function_name = sys.argv[1]
payload = [
{
'definition': {
'type': 'query_value',
'requests': [
{'q': 'avg:aws.lambda.duration.p50{resource:input}'}
],
'title': 'p50',
'title_size': '16'
}
},
{
'definition': {
'type': 'query_value',
'requests': [
{'q': 'avg:aws.lambda.duration.p80{resource:input}'}
],
'title': 'p80'
}
}
]
答案 0 :(得分:3)
如果您确定在有效负载的其他地方没有字符串“输入”。
这将很容易更换。
import json
function_name = sys.argv[1]
payload = [
{
'definition': {
'type': 'query_value',
'requests': [
{'q': 'avg:aws.lambda.duration.p50{resource:input}'}
],
'title': 'p50',
'title_size': '16'
}
},
{
'definition': {
'type': 'query_value',
'requests': [
{'q': 'avg:aws.lambda.duration.p80{resource:input}'}
],
'title': 'p80'
}
}
]
payload = json.loads(json.dumps(payload).replace('input', function_name))
不要忘记导入json。
否则,您将需要遵循其他人的解决方案
答案 1 :(得分:0)
我不知道你为什么说 .replace
不起作用。只需在单个字符串上执行此操作:
>>> function_name = "NAME"
>>> text = 'avg:aws.lambda.duration.p50{resource:input}'
>>> text.replace("input",function_name)
'avg:aws.lambda.duration.p50{resource:NAME}'
您也可以只进行内联替换而不分配变量:
>>> 'avg:aws.lambda.duration.p50{resource:input}'.replace("input",function_name)
'avg:aws.lambda.duration.p50{resource:NAME}'
如果你想在列表中做到这一点,那么是的,你不能那样做。
您可能还想研究 f 字符串。
>>> text = f'avg:aws.lambda.duration.p50{{resource:{function_name}}}'
>>> text
'avg:aws.lambda.duration.p50{resource:NAME}'
答案 2 :(得分:0)
一种非常直接的方法是访问列表字典的键列表中的字典值...
换句话说,隔离字符串并使用 .replace()
for i in payload:
i['definition']['requests'][0]['q'] = i['definition']['requests'][0]['q'].replace("input", function_name)
我确定有更通用的方法,但这是可行的。
或者,如果可能,使用字符串格式重做您的 payload
:
payload = [
{
'definition': {
'type': 'query_value',
'requests': [
{'q': 'avg:aws.lambda.duration.p50{resource:%s}' % function_name}
],
'title': 'p50',
'title_size': '16'
}
},
{
'definition': {
'type': 'query_value',
'requests': [
{'q': 'avg:aws.lambda.duration.p80{resource:%s}' % function_name}
],
'title': 'p80'
}
}
]
答案 3 :(得分:0)
有很多方法可以实现这一点,其中一种方法是使用 % 格式:
function_name = sys.argv[1]
payload = [
{
'definition': {
'type': 'query_value',
'requests': [
{'q': "avg:aws.lambda.duration.p50{resource:%s}" % function_name}
],
'title': 'p50',
'title_size': '16'
}
},
{
'definition': {
'type': 'query_value',
'requests': [
{'q': "avg:aws.lambda.duration.p80{resource:%s}" % function_name}
],
'title': 'p80'
}
}
]
答案 4 :(得分:0)
你有很多方法可以做到这一点。我给你三个。
q_input = input()
payload = f'avg:aws.lambda.duration.p50 {q_input}'
q_input = input()
payload = f'avg:aws.lambda.duration.p50 %s' % q_input
q_input = input()
payload = f'avg:aws.lambda.duration.p50 {}'.format(q_input)
更多信息here。