【问题标题】:Python for loop within function multiple parametersPython for循环内函数多个参数
【发布时间】:2021-02-12 15:02:47
【问题描述】:

我目前遇到一个问题,正在寻求社区帮助。

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

字典-

{'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
"""

我知道还有其他方法可以解决这个问题,但确实需要帮助解决使用双 {{ }}

的给定问题

【问题讨论】:

  • @schwobasegglthat 由于双花括号而无法工作。
  • 不幸的是需要那些双花括号
  • 双花括号,建议jinja2模板。是这样吗?如果你想做字符串格式化 - 使用单个花括号。
  • replace_params 定义了一个参数,但您在调用时传递了两个参数。这是为什么呢?
  • 您是否需要类似 ''It was {{sunny}} in {{nyc}}'' 的输出?

标签: python function for-loop str-replace


【解决方案1】:

如 cmets 中所述,双花括号建议使用 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 会更容易。

【讨论】:

  • 如果我使用for k,v in qry_params.items(): string1 = string1.replace('{{'+k+'}}', v) 不使用该功能,我不会得到\n 但使用我使用的功能,怎么会?
  • 您确实有新行,但您看不到它。无论如何,使用str.strip() 方法。我编辑了我的答案
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多