在Python的最后一次循环迭代中略过逗号

时间:2017-03-17 17:37:11

标签: python string

我正在尝试迭代Python中的字典。输出必须类似于某种格式,因此它可以用作其他内容的输入。输入如下所示:

"ok":"1",
"invalid", "0",
"unknown", "4",
...

输出应如下所示:

operation,ok=1,invalid=0,unknown=4,...

我非常接近于使用for循环,但我读到这可以通过Python中的.join()轻松完成。这是我现在的代码:

output_str = 'operation,'
for key, val in events.items():
    output_str += '{0}={1},'.format(key, val)
print output_str

我可以使用.join执行此操作吗?我读到加入将允许我跳过最后一次迭代的逗号。我只是不确定如何预先设置我的"操作,"如果我这样做,就把它串起来。

2 个答案:

答案 0 :(得分:7)

你可以在这里使用str.join函数将不同的元素连接在一起:

output_str = 'operation,'
output_str += ','.join('{0}={1}'.format(key,val) for key,val in events.items())

或将其放入单行(甚至缩短):

output_str = 'operation,'+','.join('{0}={1}'.format(*tup) for tup in events.items())

这是如何工作的?正如documentation中指定的那样,str.join需要iterablestr并将它们连接在一起分隔符(这里是',')。因此','.join(['foo','bar','qux'])会生成'foo,bar,qux'

现在我们在这里使用生成器。对于key,value中的events.items()对,我们使用'{0}={1}'.format(key,val)构建字符串。因此,如果key='ok'val='1',则{0}={1}'.format(key,val)将生成ok=1。现在我们一起加入所有这些。

由于str.join 不添加尾部分隔符,因此它符合您的问题规范。 join通常也会优于字符串连接(在循环中)。

答案 1 :(得分:1)

您正在寻找的功能是str.rstrip() 它需要删除一个字符列表才能执行

output_str = output_str.rstrip(',')

但Willem Van Onsem提出的解决方案更好,因为它避免了问题的开始。