2015-09-18 205 views
2

我的字典是消除不必要的逗号,从蟒蛇字典

d= {'add1':'','add2':'address2','add3':'' } 

我想参加所有的值作为逗号分隔的单词列表。

如果d是d= {'add1':'','add2':'address2','add3':'' }

然后输出将是address2

如果d是d= {'add1':'address1','add2':'address2','add3':'' }

然后输出将是address1,address2

如果d是d= {'add1':'address1','add2':'address2','add3':'address3' }

然后输出将是address1,address2,address3

如果d是d= {'add1':'','add2':'','add3':'' }

然后输出将被''(只是空字符串)

我已经试过?

",".join([d.get('add1',''), d.get('add2',''), d.get('add3','')]) 

但我得不到预期的输出。

回答

4

如果你并不需要担心为了

','.join(value for value in d.itervalues() if value) 

如果你的钥匙总是ADD1等,他们将很容易排序以确保订单

','.join(d[key] for key in sorted(d.keys()) if d[key]) 
+1

你的第一个例子不起作用(语法无效)。你需要......的价值。 – luator

+0

谢谢@luator,我错过了。 :) –

2

您可以简单地加入非空值:

','.join(v for v in d.itervalues() if v) 
1

您必须先筛选出空的蜇伤:

​​
1

可以得到d.values()后使用列表理解,然后str.join() -

','.join([v for v in d.values() if v]) 

演示 -

>>> d= {'add1':'','add2':'address2','add3':'' } 
>>> ','.join([v for v in d.values() if v]) 
'address2' 
>>> d= {'add1':'address1','add2':'address2','add3':'' } 
>>> ','.join([v for v in d.values() if v]) 
'address1,address2' 
>>> d= {'add1':'','add2':'','add3':'' } 
>>> ','.join([v for v in d.values() if v]) 
'' 
>>> d= {'add1':'address1','add2':'address2','add3':'address2' } 
>>> ','.join([v for v in d.values() if v]) 
'address1,address2,address2' 
0

使用dict.values()方法和filter功能:

','.join(filter(None, d.values()))