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

use*_*760 1 python string

我试图在Python中迭代字典.输出必须类似于某种格式,因此它可以用作其他内容的输入.输入看起来像这样:

"ok":"1",
"invalid", "0",
"unknown", "4",
...
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

operation,ok=1,invalid=0,unknown=4,...
Run Code Online (Sandbox Code Playgroud)

我真的很接近于使用for循环,但我读到这可以用.join()Python 很容易地完成.这是我现在的代码:

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

我可以这样做.join吗?我读到加入将允许我跳过最后一次迭代的逗号.如果我这样做,我只是不确定如何将所有"操作"字符串添加到所有内容中.

Wil*_*sem 7

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

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

或者将其放入单线(甚至使其更短):

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

这是如何运作的?随着中指定的文件,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通常也会超过字符串连接(在循环中).