python - 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 {{ }} 来解决给定问题的帮助
解决方案
如评论中所述,双花括号建议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 会更容易。
推荐阅读
- flutter - 使用默认值初始化类参数
- php - PHP:计数和求和关联数组
- python - 如何递归地遍历 xml 文件并访问子节点/元素并使用 Python 存储它们的数据?
- ios - 使用 CGContext 绘制填充圆
- python-3.x - TypeError:列表索引必须是整数或切片,而不是 str;迭代列表时出错
- android-mediarecorder - 在 MediaRecorder 中使用 AudioPlaybackCapture API
- kubernetes - Kubernetes 就绪探测失败:拨打 tcp 10.244.0.10:5000:连接:连接被拒绝
- c++ - 尝试获取物理设备时出现 Vulkan 错误 VK_ERROR_INITIALIZATION_FAILED
- python - 为什么非本地不创建新的外部变量(与全局不同)
- c# - 已解决 - C# Service HttpClient 响应 null