2016-11-09 166 views
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] 
+0

你真正想要的是** **格式?为什么? –

回答

5

这里是这样做的Python化的方式使用list comprehension

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

结果你输入得更快☺ –

+0

你不需要方括号,然后发一个生成器表达式 –

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' 
+0

我实际上比我的回答更喜欢它,因为它避免了'a [x]'的尴尬使用。 –

+0

@SumnerEvans我更喜欢这种方式,但你的答案实际上比我的更简洁,而且肯定有什么可说的。你也可能执行得更好,因为它没有额外的函数调用'items()'? – elethan

+1

嗯......我不确定字典是如何存储在背景中的,我假设它们只是一组元组,所以检索它们应该相当高效,甚至可能比检索密钥更有效,然后检索值。我对图书馆不太确定,不太确定。 –

3

你可以wr伊特的列表理解表达得到键值字符串列表中,然后加入他们的,

>>> d = {3:4,5:6} 
>>> ', '.join('{} {}'.format(k, v) for k, v in d.items()) 
'3 4, 5 6' 

,或者甚至使用repr()注:这是一个黑客,我认为.join()方法更Python):

>>> repr(d)[1:-1].replace(':', '') 
'3 4, 5 6' 
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 

一切都可以转换成一个字符串,并作为一个操纵。这就是在这里所做的。从dictstring然后链接replace方法。

+1

你可以谈谈这个与列表理解的效率吗? –

+0

我的预感告诉我列表的理解速度要快得多,但是我现在不能'因为我在工作'而现在'时间过去了。尽管如此,随意尝试。 –

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'