我正在尝试迭代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
执行此操作吗?我读到加入将允许我跳过最后一次迭代的逗号。我只是不确定如何预先设置我的"操作,"如果我这样做,就把它串起来。
答案 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
需要iterable
个str
并将它们连接在一起分隔符(这里是','
)。因此','.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提出的解决方案更好,因为它避免了问题的开始。