首页 > 解决方案 > Python for循环内函数多个参数

问题描述

我目前遇到一个问题并寻求一些社区帮助。

我无法弄清楚这个问题。试图用函数中给定的字典值替换多个字符串中的 {{ }} 参数。

字典 -

{'id' : 'nyc', 'weather':'sunny','id2':'bos','weather2':'snowy'}

字符串 1 -

"""
It was {{weather}} in {{id}}
"""

字符串2 -

"""
It was {{weather2}} in {{id2}}
"""

显然是一个非常简化的例子......

for循环是这样的-

def replace_params(qry):
    for k,v in qry_params.items():
        qry = qry.replace('{{'+k+'}}', v)
    
    return qry


replace_params(string1,string2)

所以输出变成

"""
It was sunny in nyc
"""

我知道还有其他方法可以解决此问题,但确实需要使用 double {{ }} 来解决给定问题的帮助

标签: pythonfunctionfor-loopstr-replace

解决方案


如评论中所述,双花括号建议jinja2使用模板。你需要安装jinja2

然后

from jinja2 import Template

data = {'id' : 'nyc', 'weather':'sunny','id2':'bos','weather2':'snowy'}

string1 = """
It was {{weather}} in {{id}}
"""

string2 = """
It was {{weather2}} in {{id2}}
"""

def render(values, *args):
    return [Template(arg).render(values).strip() for arg in args]

print(render(data, string1, string2))

输出

['It was sunny in nyc', 'It was snowy in bos']
    

所有这一切 - 如果你真的使用模板 - 这不是应该的,就像这样

from jinja2 import Template

data = [{'id' : 'nyc', 'weather':'sunny'},{'id':'bos','weather':'snowy'}]
my_template = Template("It was {{weather}} in {{id}}")

def render(values, template):
    return [my_template.render(item) for item in values]

print(render(data, my_template))

您可能在模板中有循环。但是对于这样的事情,使用单括号和f-stringstr.format()代替 jinja tempalte 会更容易。


推荐阅读