有没有办法将元组列表转换为单个元组?我从cursor.fetchall()收到了一个元组列表,但是想把它变成一个单元组:
curr_table_columns = cursor.fetchall()
例如:
[(u'w_id',), (u'w_name',), (u'w_street',)]
变为
[(u'w_id', u'w_name', u'w_street')]
答案 0 :(得分:3)
With itertools.chain
,这是微不足道的。 from itertools import chain
您可以执行以下任一操作:
[tuple(chain.from_iterable(curr_table_columns))]
或:
[tuple(chain(*curr_table_columns))]
前者是长期或无限可迭代输入的首选(尽管不要在tuple
包裹无限制!);对于小输入(特别是已经是list
或tuple
的输入),后者稍慢,但很好。任何一个都要比genexpr快得多,并且根据任何大小的输入进行索引。
答案 1 :(得分:2)
试试这个:
a=[(u'w_id',), (u'w_name',), (u'w_street',)]
print [tuple([i[0] for i in a])]
输出:
[(u'w_id', u'w_name', u'w_street')]
答案 2 :(得分:2)
效率不高*,但很简单:
>>> ts = [(u'w_id',), (u'w_name',), (u'w_street',)]
>>> sum(ts, ())
('w_id', 'w_name', 'w_street')
所以,如果你必须将它包装在一个列表中:
>>> result = [sum(ts, ())]
>>> result
[('w_id', 'w_name', 'w_street')]
*警告:按比例缩放。有些人可能倾向于滑动以将某些列名称连接到单个容器中。绝对不要试图以这种方式处理数百万个元组。
使用itertools
解决方案进行线性时间。
答案 3 :(得分:0)
此函数可以将listWidgets项转换为单个元组,也可以将多个元组元素转换为单个元组:用于Sqlite3和来自listwidgets的数据查询。
def tuple_converter(self,item):
target = ''
for i in item:
target += i + " "
target = target.rstrip()
target = tuple(target.split(","))
return target
#syntax name = tuple_converter(tuple((item).split()))
'''