python:字典转字符串,自定义格式?
目前我只在显示键,每个键占一行:
'<br/>'.join(mydict)
我该怎么做才能把它们显示成 键:: 值 的格式,每个都在新的一行呢?
5 个回答
7
在Python 3.6中,我更喜欢这种写法,这样代码看起来更清晰易懂:
'<br/>'.join([f'{key}: {value}' for key, value in d.items()])
可以查看 PEP 498 -- 字面量字符串插值
11
有一个更酷的解决方案,可以用 join
来把两个项目和 (key,value) 对都连接起来,这样就不需要现在已经过时的 %
插值了。这个方法只用一个虚拟变量 _
,而且省去了多余的列表推导:
"<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'
112
可以使用 dict.items()
这个方法,它会返回一个包含键和值的元组的迭代器:
'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])
更新为现代的 f-string
语法:
'<br/>'.join([f'{key}:: {value}' for key, value in d.items()])