Ответ 1
Вот один из вариантов:
from collections import defaultdict
my_csv = '{d[first]},{d[middle]},{d[last]}'
print( my_csv.format( d=defaultdict(str, first='John', last='Doe') ) )
У меня есть следующий код Python (я использую Python 2.7.X):
my_csv = '{first},{middle},{last}'
print( my_csv.format( first='John', last='Doe' ) )
Я получаю исключение KeyError
, потому что "средний" не указан (это ожидается). Тем не менее, я хочу, чтобы все эти заполнители были необязательными. Если эти именованные параметры не указаны, я ожидаю, что заполнители будут удалены. Поэтому строка, напечатанная выше, должна быть:
John,,Doe
Есть ли встроенная функциональность, чтобы сделать эти заполнители необязательными или требуется более подробная работа? Если последнее, если кто-то может показать мне самое простое решение, я бы его оценил!
Вот один из вариантов:
from collections import defaultdict
my_csv = '{d[first]},{d[middle]},{d[last]}'
print( my_csv.format( d=defaultdict(str, first='John', last='Doe') ) )
Здесь другой параметр, который использует оператор интерполяции строк %
:
class DataDict(dict):
def __missing__(self, key):
return ''
my_csv = '%(first)s,%(middle)s,%(last)s'
print my_csv % DataDict(first='John', last='Doe') # John,,Doe
В качестве альтернативы, если вы предпочитаете использовать более современный метод str.format()
, следующее будет работать, но будет менее автоматическим в том смысле, что вы будете явно определять все возможные заполнители заранее (хотя вы можете изменить DataDict.placeholders
на лету при желании):
class DataDict(dict):
placeholders = 'first', 'middle', 'last'
default_value = ''
def __init__(self, *args, **kwargs):
self.update(dict.fromkeys(self.placeholders, self.default_value))
dict.__init__(self, *args, **kwargs)
my_csv = '{first},{middle},{last}'
print(my_csv.format(**DataDict(first='John', last='Doe'))) # John,,Doe
"It does{cond} contain the the thing.".format(cond="" if condition else " not")
Думаю, я бы добавил это, потому что это была функция, так как вопрос был задан, вопрос по-прежнему появляется в начале результатов Google, и этот метод встроен непосредственно в синтаксис python (не требуется импорт или пользовательские классы). Это простой сокращенный условный оператор. Они интуитивно понятны для чтения (когда их просто просты), и часто полезно, чтобы они short-circuit.