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

47 投票
5 回答
69673 浏览
提问于 2025-04-17 08:25

目前我只在显示键,每个键占一行:

'<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()])

撰写回答