将元组列表格式化并打印为一行

7

我有一个包含元组的列表,这个列表是从数据库查询生成的,它看起来像这样。

[(item1, value1), (item2, value2), (item3, value3),...]

元组长度不确定,当我打印输出时,它会像这样。
item1=value1, item2=value2, item3=value3,...

我已经寻找了一段时间,试图找到解决方案,但是我发现我找到的所有.join()解决方案都无法解决这种情况。


无论它被称为什么......我认为它是一个元组。那它到底是什么? - lawless
我认为@user2357112指出了你有一个包含元组的列表...主要项目本身不是元组... [...] - Jon Clements
6个回答

13

你想要的是这样的:

>>> a = [('val', 1), ('val2', 2), ('val3', 3)]
>>> ', '.join('{}={}'.format(*el) for el in a)
'val=1, val2=2, val3=3'

这也不关心元组元素的类型是什么...你会自动获得它们的str表示。


这也不关心元组元素的类型,这就是为什么它确实是一个很好的答案。 - Grijesh Chauhan

3
如果每个元组只是一个(item, value)对,那么这应该可以工作:
l = [(item1, value1), (item2, value2), (item3, value3), ...]
', '.join('='.join(t) for t in l)
'item1=value1, item2=value2, item3=value3, ...'

2
内部的 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 Chauhan
1
@GrijeshChauhan 在join中使用*会导致错误,提示join()只接受一个参数。在这种情况下,join只能接受一个可迭代的t作为参数。也许@Jon Clements在format中使用*让你感到困惑。在这种情况下,如果没有*,只有一个参数(一个元组)将被传递给format,该参数将用于填充第一个{}。这将引发错误,因为字符串期望两个位置参数。请参考这个答案,了解更多关于在Python中解包参数的信息。 - FastTurtle
我现在明白了...所以我在注释中写 '='.join('a','b'),应该是 '='.join( ('a','b') ) ? 再次感谢您的回答和评论,对我非常有帮助。 - Grijesh Chauhan
1
@GrijeshChauhan 没错!看起来你懂了。需要记住的一件事是join()需要一个可迭代对象,所以'='.join(['a', 'b'])也可以使用。对我来说,在Python解释器中尝试这些语法问题非常有帮助。 - FastTurtle
这是一个非常巧妙的技巧!对于N>2维元组同样适用! - not2qubit

3

您也可以使用itertools

from itertools import starmap
', '.join(starmap('{}={}'.format, a))

1
一种可能的解决方案是这样的,绝对是最短的代码。
>>> a = [('val', 1), ('val2', 2), ('val3', 3)]
>>>', '.join('%s=%s' % v for v in a)
'val=1, val2=2, val3=3'

适用于Python 2.7。

1

试试这个:

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)

0
如果你想要类似的东西,我会使用字典。
dict = {1:2,3:4}
print dict

那么,你可以像这样循环它:

dict = {1:2,3:3}
print dict

for i in dict:
    print i, "=", dict[i]

希望能对你有所帮助!

为什么要用字典?OP 没有进行键查找。 - Ashwini Chaudhary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接