从python dict中删除不必要的逗号

从python dict中删除不必要的逗号,python,python-2.7,Python,Python 2.7,我的口述是 d= {'add1':'','add2':'address2','add3':'' } 我希望将所有值作为逗号分隔的单词列表连接起来 如果d是d={'add1':'','add2':'add2','add3':''} 然后输出将是address2 如果d是d={'add1':'address1','add2':'address2','add3':''} 然后输出将是address1,address2 如果d是d={'add1':'address1','add2':'address2

我的口述是

d= {'add1':'','add2':'address2','add3':'' }
我希望将所有值作为逗号分隔的单词列表连接起来

如果d是
d={'add1':'','add2':'add2','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','')])

但我并没有得到我预期的结果

您可以简单地连接非空值:

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

如果你不需要担心秩序的话

','.join(value for value in d.itervalues() if value)
如果您的密钥总是add1等,它们将很容易排序,以确保秩序

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

您必须首先过滤掉空的stings:

",".join([x for x in d.values() if x])

您可以在获取
d.values()
后使用列表理解,然后使用
str.join()
-

演示-

>>> 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'
使用
dict.values()
方法和
filter
函数:


,'.join(筛选器(None,d.values())

您的第一个示例不起作用(语法无效)。您需要用
值替换…
中的值。谢谢@luator,我错过了。:)
>>> 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'