Python 将一个 4 元组的列表转换为 3 个 2 元组,在元组的最后一个元素上连接。

问题描述 投票:0回答:2

在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个元组的列表转换为3个2个元组的列表,这样我就可以使用一个单一的查询,一次选择所有的值。

对不起,有歧义,希望这能让大家了解我想达到的目的。

谢谢!我有一个django查询values_list()的4个元组列表,即[('AAA', '123', 'xyz', '111', (BBB', '45', '45')]。

python-3.x tuples django-queryset iterable-unpacking
2个回答
1
投票

一个完整的函数应该是这样的。

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 以获得你的输出。


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

0
投票

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

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

然后,我把值列表和我想要的值的索引传给它,它就会像一个魔法一样工作!

© www.soinside.com 2019 - 2024. All rights reserved.