Python for 函数内多参数循环
Python for loop within function multiple parameters
我目前遇到了一个问题,正在寻求社区帮助。
我想不通这个问题。尝试用函数中给定的字典值替换多个字符串中的 {{ }} 参数。
字典 -
{'id' : 'nyc', 'weather':'sunny','id2':'bos','weather2':'snowy'}
string1 -
"""
It was {{weather}} in {{id}}
"""
string2 -
"""
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 {{ }}
解决给定问题的帮助
如评论中所述,双花括号建议使用 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-string
或 str.format()
而不是 jinja tempalte 更容易。
我目前遇到了一个问题,正在寻求社区帮助。
我想不通这个问题。尝试用函数中给定的字典值替换多个字符串中的 {{ }} 参数。
字典 -
{'id' : 'nyc', 'weather':'sunny','id2':'bos','weather2':'snowy'}
string1 -
"""
It was {{weather}} in {{id}}
"""
string2 -
"""
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 {{ }}
解决给定问题的帮助如评论中所述,双花括号建议使用 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-string
或 str.format()
而不是 jinja tempalte 更容易。