25

次の Python コードがあります (Python 2.7.X を使用しています)。

my_csv = '{first},{middle},{last}'
print( my_csv.format( first='John', last='Doe' ) )

KeyError'middle' が指定されていないため、例外が発生します (これは予期されることです)。ただし、これらのプレースホルダーはすべてオプションにしたいと考えています。これらの名前付きパラメーターが指定されていない場合、プレースホルダーは削除されると思います。したがって、上記の文字列は次のようになります。

John,,Doe

これらのプレースホルダーをオプションにする組み込み機能はありますか? それとも、さらに詳細な作業が必要ですか? 後者の場合、誰かが私に最も簡単な解決策を示すことができれば、私はそれを感謝します!

4

4 に答える 4

5

文字列補間演算子を使用する別のオプションを次に示します%

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
于 2012-06-13T21:04:21.090 に答える