如何将字典转换为字符串

15

我正在尝试使用这里提供的解决方案

我想得到一个与字典具有相同输出的字符串,即字符后跟随出现次数。

例如:d2m2e2s3


3
你希望字符串被格式化成什么样子? - Amber
你能解释一下输入和输出吗?你是想从字典 Out[25]: {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 中生成字符串吗? - shibly
我想要的输出是d2f2g2q5w3。 - TechacK
5个回答

47

要将字典转换为您想要的格式的字符串:

''.join('{}{}'.format(key, val) for key, val in adict.items())

如果你想按键按字母顺序排序:

''.join('{}{}'.format(key, val) for key, val in sorted(adict.items()))

我想按顺序返回原始字符串中每个字母及其出现的次数。 - TechacK
我尝试了 Python 2.6,出现了 ValueError: zero length field name in format。应该使用 ''.join('{0}{1}'.format(key, val) for key, val in adict.items())。 - Sola Yang
来自Python 3.6的代码:''.join(f'{k}{v}' for k,v in my_dict.items()) - Daniel Braun

3

这就是您要找的内容吗?

#!/usr/bin/python

dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
st=""
for key,val in dt.iteritems():
    st = st + key + str(val)

print st

输出: q5w3d2g2f2

还是这个?

#!/usr/bin/python

dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
dt=sorted(dt.iteritems())
st=""

for key,val in dt:
    st = st + key + str(val)

print st

输出:d2f2g2q5w3

join 的示例:

#!/usr/bin/python

adict=dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
' '.join('{0}{1}'.format(key, val) for key, val in sorted(adict.items()))

输出:'d2 f2 g2 q5 w3'

这不是最佳选择,因为列表推导和使用join进行字符串连接更快。 - San4ez
我想按顺序返回原始字符串中每个字母后面它出现的次数。 - TechacK
@San4ez,我也加入了使用join的示例。 - shibly

1
>>> result = {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3}
>>> ''.join('%s%d' % (k,v) for k,v in result.iteritems())
'q5w3d2g2f2'

或者如果你想按字母顺序排列...

>>> ''.join('%s%d' % (k,v) for k,v in sorted(result.iteritems()))
'd2f2g2q5w3'

或者,如果您希望按计数递增的顺序排列它们...

>>> ''.join('%s%d' % (k,v) for k,v in sorted(result.iteritems(),key=lambda x:x[1]))
'd2g2f2w3q5'

我想按顺序返回原始字符串中每个字母后面它出现的次数。 - TechacK

1
一旦您有了字典解决方案,只需使用join将它们连接成一个字符串:
''.join([k+str(v) for k,v in result.iteritems()])
您可以用任何分隔符(包括无)替换''。

输出类型应为:d2m2e2s3 - TechacK
好的,我修改了我的答案,包括密钥(即字母)。 - happydave
我想按顺序获取原字符串中每个字母及其出现的次数。 - TechacK

-1

另一种方法是仅使用join(),避免使用%插值(或format()):

''.join(''.join((k, str(v))) for k,v in mydict.items())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接