将字典转换为字符串 Python

3
我将尝试将字典转换为字符串。
例如:
a={3:4,5:6}
s='3 4, 5 6'

我尝试的方法是:
s=''
i=0
for (k,v) in d.items():
    s=s+str(k)+' '+str(v)
    while i < len(s):
        if s[i]==str(v) and s[i+1]==str(k):
            s+=s+s[i]+','+s[i+1]

你真的想要那种格式吗?为什么? - Stefan Pochmann
5个回答

5

以下是使用Pythonic的方式,通过列表推导式实现的方法:

s = ', '.join([str(x) + ' ' + str(a[x]) for x in a])

输出:

'3 4, 5 6'

更新:正如Julien Spronck提到的,方括号([])并不是必需的。因此,以下代码具有相同的效果:

s = ', '.join(str(x) + ' ' + str(a[x]) for x in a)

Working PythonFiddle


2
原来你打字更快 ☺ - Ma0
你不需要方括号,这会使生成器表达式。 - Julien Spronck

3
您可以编写列表推导式表达式来获取键值字符串列表,然后在其中使用逗号 , 连接它们。
>>> d = {3:4,5:6}
>>> ', '.join('{} {}'.format(k, v) for k, v in d.items())
'3 4, 5 6'

或者,甚至可以使用repr()(注意:这是一种hack,我认为.join()方法更符合Pythonic风格):

>>> repr(d)[1:-1].replace(':', '')
'3 4, 5 6'

1
我会使用列表推导式来完成以下操作:
', '.join([str(k) + ' ' + str(v) for k, v in a.items()])

为了举例说明:

In [1]: a = {3:4, 5:6}

In [2]: s = ', '.join([str(k) + ' ' + str(v) for k, v in a.items()])

In [3]: s
Out[3]: '3 4, 5 6'

我实际上更喜欢这个答案,因为它避免了尴尬地使用 a[x] - Sumner Evans
@SumnerEvans 我也更喜欢这种方式,但你的答案实际上比我的更简洁,这方面肯定有值得称赞的地方。你的方式是否也更高效,因为它没有额外调用 items() 函数? - elethan
1
嗯...我不确定字典是如何在后台存储的,我猜它们只是一组元组,因此检索它们应该相当高效,甚至可能比检索键再检索值更高效。我对这个库不够熟悉,不能确定。 - Sumner Evans

1
当然,最符合Python风格的解决方案是使用列表推导式(参见@SumnerEvans和其他人),但为了有一个替代方案,我会在这里发布这个:
a = {3: 4, 5: 6}

v = str(a)
for rep in ['{', '}', ':']:
    v = v.replace(rep, '')
print(v)  # prints -> 3 4, 5 6

任何东西都可以转换为字符串并像一个字符串一样操作。这就是这里所做的。从 dict 转换为 string,然后链接使用 replace 方法。


1
你能谈谈这个的效率和列表推导式相比吗? - Sumner Evans
我的直觉告诉我列表推导式更快,但由于我在工作中,现在无法使用 timeit 进行测试。不过你可以自由尝试。 - Ma0

0

你仍然可以像这样拥有它

s=''
i=0
a={3:4,5:6}
for (k,v) in a.items():
    if i < len(a) and s == '':
        s = s + str(k) + ' '+ str(v)
    elif i < len(a) and s != '':
        s += ", " + str(k) + ' '+ str(v)
    i += 1
    print(s)

这应该会给你

s='3 4, 5 6'

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