我有一个包含元组的列表,这个列表是从数据库查询生成的,它看起来像这样。
[(item1, value1), (item2, value2), (item3, value3),...]
元组长度不确定,当我打印输出时,它会像这样。
item1=value1, item2=value2, item3=value3,...
我已经寻找了一段时间,试图找到解决方案,但是我发现我找到的所有.join()
解决方案都无法解决这种情况。
你想要的是这样的:
>>> a = [('val', 1), ('val2', 2), ('val3', 3)]
>>> ', '.join('{}={}'.format(*el) for el in a)
'val=1, val2=2, val3=3'
这也不关心元组元素的类型是什么...你会自动获得它们的str
表示。
(item, value)
对,那么这应该可以工作:l = [(item1, value1), (item2, value2), (item3, value3), ...]
', '.join('='.join(t) for t in l)
'item1=value1, item2=value2, item3=value3, ...'
join
对每个 (item, value)
对进行操作,并将每个对转换为 item=value
。此时,您基本上拥有一个 ["item1=value1", "item2=value2", "item3=value3", ...]
的列表。外部的 join
对每个 "item=value"
进行操作,并使用逗号和空格将它们组合起来形成最终结果。 - FastTurtle'='.join('a','b')
== a=b
,所以'='.join(t) for t in l
会给我一个像["item1=value1", "item2=value2", "item3=value3"..
这样的列表,然后你可以使用外连接通过,
来连接。明白了,谢谢您的回复。但是我有一个疑问。我们需要使用*
吗?因为'='.join(t) for t in l
应该是'='.join(*t) for t in l
吗? - Grijesh Chauhanjoin
中使用*
会导致错误,提示join()
只接受一个参数。在这种情况下,join
只能接受一个可迭代的t
作为参数。也许@Jon Clements在format
中使用*
让你感到困惑。在这种情况下,如果没有*
,只有一个参数(一个元组)将被传递给format
,该参数将用于填充第一个{}
。这将引发错误,因为字符串期望两个位置参数。请参考这个答案,了解更多关于在Python中解包参数的信息。 - FastTurtle'='.join('a','b')
,应该是 '='.join( ('a','b') )
? 再次感谢您的回答和评论,对我非常有帮助。 - Grijesh Chauhanjoin()
需要一个可迭代对象,所以'='.join(['a', 'b'])
也可以使用。对我来说,在Python解释器中尝试这些语法问题非常有帮助。 - FastTurtleN>2
维元组同样适用! - not2qubit您也可以使用itertools
from itertools import starmap
', '.join(starmap('{}={}'.format, a))
>>> a = [('val', 1), ('val2', 2), ('val3', 3)]
>>>', '.join('%s=%s' % v for v in a)
'val=1, val2=2, val3=3'
试试这个:
lst = [('item1', 'value1'), ('item2', 'value2'), ('item3', 'value3')]
print ', '.join(str(x) + '=' + str(y) for x, y in lst)
我正在明确地将项目和值转换为字符串,如果一个(或两个)已经是字符串,则可以删除相应的str()
转换:
print ', '.join(x + '=' + y for x, y in lst)
dict = {1:2,3:4}
print dict
那么,你可以像这样循环它:
dict = {1:2,3:3}
print dict
for i in dict:
print i, "=", dict[i]
[...]
- Jon Clements