将 .format() 与元组一起使用而不是字典

Using .format() with tuples instead of dictionaries

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

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

不知道是不是更优雅,但我想把这个例子做成一个元组来应用。

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

print("{} {}".format(holiday[0].strftime("%d/%m"), holiday[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))

这里不用担心元组,如果你确实有一个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