使用带有元组而不是字典的.format()

时间:2015-03-01 15:37:21

标签: python string python-3.x format

我的代码中有一行使用字典:

print("{} {}".format(holiday["data"].strftime("%d/%m"), holiday["description"]))

我不知道它是否更优雅,但我想将此示例应用为元组。

3 个答案:

答案 0 :(得分:1)

如果两个值都在元组中,您可以使用datetimedate个对象支持直接使用str.format() 进行格式化的事实

holiday_tuple = (datetime.date(2015, 3, 1), 'some description')
print("{:%d/%m} {}".format(*holiday_tuple))

*arg语法将holiday_tuple中的两个元素作为单独的参数应用。

您也可以让字符串模板进行提取:

print("{0[0]:%d/%m} {0[1]}".format(holiday_tuple))

演示:

>>> import datetime
>>> holiday_tuple = (datetime.date(2015, 3, 1), 'some description')
>>> print("{:%d/%m} {}".format(*holiday_tuple))
01/03 some description
>>> print("{0[0]:%d/%m} {0[1]}".format(holiday_tuple))
01/03 some description

我做过类似字典的事情;而不是从参数中的字典中提取键,使用**kwargs语法或使用索引语法提取这些键:

holiday_dictionary = {'data': datetime.date(2015, 3, 1), 'description': 'some description')
print("{data:%d/%m} {description}".format(**holiday_dictionary))
print("{0[data]:%d/%m} {0[description]}".format(holiday_dictionary))

答案 1 :(得分:0)

尝试使用整数索引,具体取决于哪个索引对应于哪个值。如果你的假日变量是一个元组,那就是。否则,您应该创建一个字典并使用原始代码行。

print("{} {}".format(holiday[0].strftime("%d/%m"), holiday[1]))

答案 2 :(得分:0)

这里不需要担心元组,如果你确实有dict,那么你可以使用str.format直接从dict进行,例如:

from datetime import datetime

holiday = {
    'data': datetime.today(),
    'description': 'Would love one'
}

res = '{data:%d/%m} {description}'.format(**holiday)
# 01/03 Would love one