替换列表中的字符串

时间:2021-02-01 02:10:11

标签: python list

我正在尝试用基于用户输入的变量 (function_name) 替换 input。我试过 replacelist 不允许。还有其他方法可以替换它吗?

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'
        }
    }
]

5 个答案:

答案 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)

你有很多方法可以做到这一点。我给你三个。

  1. F-string(最适合我):
q_input = input()
payload = f'avg:aws.lambda.duration.p50 {q_input}'
  1. 字符串格式(旧样式)
q_input = input()
payload = f'avg:aws.lambda.duration.p50 %s' % q_input
  1. 字符串格式(新样式)
q_input = input()
payload = f'avg:aws.lambda.duration.p50 {}'.format(q_input)

更多信息here

相关问题