Python 将 4 元组的列表转换为三个 2 元组,连接到元组中的最后一个元素

Python convert a list of 4 tuple into three 2 tuples, joined on the last element in the tuple

来自 django 查询 values_list() 我有一个包含 4 个元组的列表,即

[('AAA', '123', 'xyz', '111'), ('BBB', '456', 'uvw', '222'), ...]

我想要的是两个元组的多个列表,连接在每个元组的最后一个元素上,即

[('AAA', '111'), ('BBB', '222'), ...]

[('123', '111'), ('456', '222'), ...]

[('xyz', '111'), ('uvw', '222'), ...]

我通过在 django 中执行多个查询并获取第一列和第二列的值列表来工作

(myQuery).values_list('col1', 'idCol')

(myQuery).values_list('col2', 'idCol')

(myQuery).values_list('col3', 'idCol')

但是,此解决方案执行多个查询,我认为这对性能而言不是很好。

所以我想知道是否有一种方法可以执行上面显示的操作,将 4 个元组的列表转换为三个 2 个元组的列表,以便我可以使用单个查询,并且 select 所有一次的值

抱歉含糊不清,希望这能让我了解我想要完成的事情,

谢谢!

def f(l):
    return [(i[0], i[-1]) for i in l]

完整的函数如下所示,

l1=[('AAA', '123', 'xyz', '111'), ('BBB', '456', 'uvw', '222')]

def f(l):
    l2=[]
    for i in l1:
        for j in range(len(i)-1):
             l2.append((i[j], i[-1]))
    return l2

l2=f(l1)
print(l2)

输出:

[('AAA', '111'), ('123', '111'), ('xyz', '111'), ('BBB', '222'), ('456', '222'), ('uvw', '222')]

然后您可以将列表中的每个元素分开 l2 以获得输出。

感谢您的帮助!最终有效的解决方案是

def to2TupleList(self, tupleList, i):
        twoTupleList = []
        for t in tupleList:
            twoTupleList.append((t[i], t[-1]))
        return twoTupleList

然后我传递值列表和我想要的值的索引,它就像一个魅力!