web-dev-qa-db-ja.com

python:文字列への辞書、カスタム形式?

現在、私はキーのみをそれぞれ新しい行に表示しています:

'<br/>'.join(mydict)

key :: valueのように表示するにはどうすればよいですか?

29
migajek

キー、値のタプルを生成するdict.items()イテレータを通過します。

'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])
78

In python 3.6私はこの構文を好むので、コードがさらに読みやすくなります。

'<br/>'.join([f'{key}: {value}' for key, value in d.items()])

PEP 498-リテラル文字列補間 を参照してください

4
firepol

それ、またはjoinを使用して両方の項目を結合するさらにクールなソリューションand(キー、値)のペアで、現在廃止されている_%_補間を回避し、単一のダミー変数___、および冗長リストの内包表記の削除:

_"<br/>".join(":: ".join(_) for _ in mydict.items())
_

Dictには順序がないため、sorted()がないと、必要なものが得られない場合があります。

_>>> mydict = dict(a="A", b="B", c="C")
>>> ", ".join("=".join(_) for _ in mydict.items())
'a=A, c=C, b=B'
_

これは、すべてのキーと値が文字列の場合にのみ機能します。そうでない場合、joinがエラーを出します。より堅牢なソリューションは次のとおりです。

_", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
_

混合型のキーおよび値に対しても、これは素晴らしい動作をします:

_>>> mydict = {'1':1, 2:'2', 3:3}
>>> ", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
'2=2, 3=3, 1=1'
_

もちろん、混合型の場合、プレーンsorted()は期待どおりに機能しません。すべてのキーが文字列(またはすべて数値など)であることがわかっている場合にのみ使用してください。前者の場合、最初のstr()も削除できます:

_>>> mydict = dict(a=1, b=2, c=2)
>>> ", ".join("=".join((k,str(v))) for k,v in sorted(mydict.items()))
'a=1, b=2, c=3'
_
4
MestreLion

私はフィリップ・デュパノビッチが上でしたことが好きでした。 str.formatメソッドを使用して、これをpython3-ishに変更しました。

'<br/>'.join(['{0}:: {1}'.format(key, value) for (key, value) in d.items()])

上記を変更して、SQLテーブルのcreateステートメントにフィードできる文字列を生成しました。

fieldpairs = ','.join(['{0} {1}'.format(key, value) for (key, value) in HiveTypes.items()])
1
user2941502

more Pythonicにしたい場合は、for-- comprehensionを完全に削除できます。

'<br/>'.join(map(':: '.join, mydict.items())
0
Sunny Patel