python:字典到字符串,自定义格式?

mig*_*jek 30 python string dictionary

目前我只显示键,每个都在新行中:

'<br/>'.join(mydict)
Run Code Online (Sandbox Code Playgroud)

如何在key :: value中显示它们,每个都在新行中?

Fil*_*vić 79

dict.items()遍历将产生键值元组的迭代器:

'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])
Run Code Online (Sandbox Code Playgroud)

  • 如果您不解压元组,则不那么冗长:`'&lt;br/&gt;'.join(['%s::%s' % kv for kv in d.items()])` (3认同)
  • 这是我见过的最pythonic的解决方案。太棒了 (2认同)

fir*_*pol 7

在 python 3.6 中,我更喜欢这种语法,它使代码更具可读性:

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

请参阅PEP 498 -- 文字字符串插值


Mes*_*ion 5

那,或者是一个更酷的解决方案,join用于同时连接项目(键,值)对,避免了现在过时的%插值,仅使用了一个哑变量_,并删除了冗余列表理解:

"<br/>".join(":: ".join(_) for _ in mydict.items())
Run Code Online (Sandbox Code Playgroud)

请注意,字典没有顺序,因此,如果没有,sorted()您可能无法得到想要的东西:

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

这仅在所有键和值都是字符串时才起作用,否则join会报错。一个更强大的解决方案是:

", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
Run Code Online (Sandbox Code Playgroud)

现在,即使对于混合类型的键和值,它也能很好地工作:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

当然,对于混合类型,纯文本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'
Run Code Online (Sandbox Code Playgroud)