[英]String formatting with a list of tuples?
我正在尝试使用带元组列表的字符串格式化,其格式如下:
formulas_and_labels = [('formula1', 'label1'),
('formula2', 'label2')]
这应该用于格式化以下字符串:
SQL_string = """SELECT
{} AS "{}",
{} AS "{}"
FROM
schema.table""".format(*formulas_and_labels)
我知道这会产生IndexError: tuple index out of range
,因为(*formulas_and_labels)
仅包含两个元素(元组),而字符串则需要4个元素(4x {})。
我设法找到解决方法,方法是先使用
formulas_and_labels_unpacked = [v for t in formulas_and_labels for v in t]
(在这里找到)。
但是,我想知道是否存在更直接的方法,例如使用.format(*el) for el in formulas_and_labels)
.format(**formulas_and_labels)
或.format(*el) for el in formulas_and_labels)
类的方法直接“双重解压缩”列表和元组?
您只需要明确指出要指代的序列项,例如:
formulas_and_labels = [('formula1', 'label1'), ('formula2', 'label2')]
SQL_string = """SELECT
{0[0]} AS "{0[1]}",
{1[0]} AS "{1[1]}"
FROM
schema.table""".format(*formulas_and_labels)
print(SQL_string)
输出:
SELECT
formula1 AS "label1",
formula2 AS "label2"
FROM
schema.table
可以将其通用化,以根据formulas_and_labels
列表中有多少对值即时创建所需的格式字符串,以处理可变数量的公式和标签:
# Generalized
formulas_and_labels = [('formula1', 'label1'),
('formula2', 'label2'),
('formula3', 'label3')]
SQL_string = """SELECT
{}
FROM
schema.table"""
SELECT_string = '{{{0}[0]}} AS "{{{0}[1]}}"'
selects = ',\n '.join(SELECT_string.format(i)
for i in range(len(formulas_and_labels)))
print(SQL_string.format(selects.format(*formulas_and_labels)))
输出:
SELECT
formula1 AS "label1",
formula2 AS "label2",
formula3 AS "label3"
FROM
schema.table
与其将公式和标签成对保存在元组中,不如将它们保存在字典中:
formulas_and_labels = {"formula1" : "1", "label1": "1a",
"formula2": "2", "label2": "2a"
}
然后,如果占位符正确命名,则可以使用您询问的.format(**formulas_and_labels)
表示法:
SQL_string = """SELECT
{formula1} AS "{label1}",
{formula2} AS "{label2}"
FROM
schema.table"""
鉴于这种:
>>> print(SQL_string.format(**formulas_and_labels))
SELECT
1 AS "1a",
2 AS "2a"
FROM
schema.table
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.