編集:質問を少し明確にしました
次の形式の辞書から文字列を取得するにはどうすればよいですか
key1 = value1
key2 = value2
比較的速い方法で?(単純な連結と比較して)
編集:質問を少し明確にしました
次の形式の辞書から文字列を取得するにはどうすればよいですか
key1 = value1
key2 = value2
比較的速い方法で?(単純な連結と比較して)
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())
ここでリスト内包表記を使用する理由はありません。
Python 3.x:
for k,v in mydict.items():
print(k, '=', v)
Python 2.x:
for k,v in mydict.iteritems():
print k, '=', v
別の回答のOPによるコメントのために編集:
関数に渡し、ここに出力しない場合は、ジェネレーターを関数に渡すか、dict自体を渡して、関数に必要な処理を任せる必要があります。
これは、スコープ内で不要な文字列に変換するよりもはるかに優れています。それが使用される場所なので、関数はそれを行う必要があります。
main関数の編集は問題外なので、ラッパー関数を作成しました。
def log_wrap(mydict):
mystr = '\n'.join(['%s = %s' % (k,v) for k,v in mydict.iteritems()])
write_to_log(mydict)
log_wrap(mydict)
明示的は暗黙的よりも優れています
リスト内包表記は、ループを回避するためではなく、リストを作成する方法です。
PEP 202から:
リスト内包表記は、map()とfilter()および/またはネストされたループが現在使用されている状況でリストを作成するためのより簡潔な方法を提供します。
したがって、自問する必要があります。Python
でこのコードを作成すると便利なのはいつですか。コンパクトかもしれませんが、コードは書かれているよりも何度も読み取られるので、その利点は何ですか?
Tor Valamoの解決策は、元の要求で求められたものではありませんが、私の意見でははるかに読みやすいため、優先する必要があります。
質問の更新後の編集
str.join
は、リストからの高速連結を実装するための良い方法です-そして、ナディアとリッチーからの返信は、それを使用する方法の良い例です。
繰り返しになりますが、すべてを1行で実行するわけではありませんが、読みやすさを強調するためにさまざまなステップに分割します。
このような:
DATA = {'key1': 'value1', 'key2': 'value2'}
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()]))
私はpythonicの方法を好みます:
mydict = {'a':1, 'b':2, 'c':3}
for (key, value) in mydict.items():
print key, '=', value