5

最近、フォーマット''.formatに比べて可読性が大幅に向上するため、機能が非常に便利であることがわかりました。%単純な文字列フォーマットを実現しようとしています:

data = {'year':2012, 'month':'april', 'location': 'q2dm1'}

year = 2012
month = 'april'
location = 'q2dm1'
a = "year: {year}, month: {month}, location: {location}"
print a.format(data)
print a.format(year=year, month=month, location=location)
print a.format(year, month, location)

最初の 2 つのプリントは期待どおりにフォーマットされますが (はい、something=something見栄えは悪いですが、これは単なる例です)、最後のプリントではKeyError: 'year'. Python で辞書を作成するためのトリックはありますか?たとえば、キーと値が自動的にsomefunc(year, month, location)入力されます。{'year':year, 'month': month, 'location': location}

私はPythonにかなり慣れていないため、このトピックに関する情報を見つけることができませんでしたが、このようなトリックは現在のコードを大幅に改善および縮小します.

事前に感謝し、私の英語を許してください。

4

5 に答える 5

6

最初print

print a.format(**data)

また、いくつかのショートカットを見つけている場合は、大きな違いはありません。

def trans(year, month, location):
    return dict(year=year, month=month, location=location)
于 2012-04-15T08:01:34.597 に答える
3
data = {'year':2012, 'month':'april', 'location': 'q2dm1'}
a = "year: {year}, month: {month}, location: {location}"

print a.format(**data)

..あなたが探しているものです。機能的には、実行すること.format(year=data['year'], ...)、またはあなたが与えた他の例と同じです。

二重アスタリスクのものは検索するのが難しいため、通常は「kwargs」と呼ばれます。これは、この構文に関する良いSOの質問です

于 2012-04-15T13:03:28.557 に答える
1

あなたは合格することができますlocals()

a.format(**locals())

もちろん、これには問題があります。ローカルですべてを渡す必要があり、変数の名前変更または削除の効果を理解するのが難しい場合があります。

より良い方法は次のとおりです。

a.format(**{k:v for k,v in locals() if k in ('year', 'month')})
# or; note that if you move the lambda expression elsewhere, you will get a different result
a.format(**(lambda ld = locals(): {k:ld[k] for k in ('year', 'month')})())

ただし、関数(もちろん、dictパラメーターを使用する必要があります)でラップしない限り、これはこれ以上簡潔ではありません。

于 2012-04-15T09:54:41.617 に答える
1

dict()呼び出し可能オブジェクトを使用できます:

dict(year=yeah, month=month, location=location)

キーワード引数を渡すと、kwargs として指定した要素を含む dict が作成されます。

引数名を指定したくない場合は、次の定位置スタイルを使用します.format()

>>> a = 'year {0} month {1} location {2}'
>>> print a.format(2012, 'april', 'abcd')
year 2012 month april location abcd

compact()ただし、 PHP で行うのと同様のこと(名前と変数を個別に指定せずに、変数名をその値にマッピングする dict を作成する) を行う場合は、しないでください。読みにくい醜いコードになるだけで、いずれにせよ厄介なハックが必要になります。

于 2012-04-15T07:53:03.093 に答える