У меня есть входной файл, который содержит строку текста заполнителя и связанных значений. Я действительно заранее не знаю, какие из них появятся, и мне было любопытно, есть ли один кодовый блок, который может удовлетворить все следующие комбинации строк-заполнителей и предоставленных значений.
По сути, я хочу это:
examples = [
{"text": "There are {} bagels in a bakers dozen.", "values": 13},
{"text": "My favorite bagels are {} and {}.", "values": ["cinnamon raisin", "maple"]},
{"text": "I have not had a pop tart in 14 {}", "values": "years"}
]
for single_example in examples:
print(single_example['text'].format(single_example['values']))
Однако format(single_example['values'])
не работает для второго text
. Вместо этого я могу сделать format(*single_example['values'])
, чтобы позволить второму примеру работать, но первый сломался бы с ошибкой IndexError: tuple index out of range
, а третий - нарезкой строки.
Я думаю, мне нужно все составить в виде списка, чтобы format(*single_example['values'])
работал по всем направлениям, но я застрял, находя подход, который работает для вышеупомянутых случаев.
Это работает для меня, но я чувствую, что может быть более обтекаемый подход.
for single_example in examples:
if isinstance(single_example['values'], list):
values = single_example['values']
else:
lst = []
lst.append(str(single_example['values']))
values = lst
print(single_example['text'].format(*values))