如何在django(python)中移除元组中多余的','

px9o7tmv  于 2023-05-01  发布在  Go
关注(0)|答案(7)|浏览(263)

我在使用django构建id列表时遇到了一个问题。如果我选择了多于1个id,它可以,但如果我只选择一个,它将在列表中产生额外的','。

testa = tuple([k['id'] for k in queryset.values('id')])
print testa

如果在查询集中正好有1个id,它将显示

(1234,)

除此之外还可以

(1234,1244)

如何删除列表中多余的','

swvgeqrz

swvgeqrz1#

(1234,)

是1元组的正确Python表示。(1234)是错误的,因为它被视为数学括号中的简单整数,计算为1234,而不是包含它的元组。
这对于列表来说是不同的,因为方括号没有这种双重用途,也意味着数学运算顺序,所以虽然[1234][1234,]都是长度为1的列表的有效表示,但默认的文本表示可以没有额外的逗号。
如果您正在设计自己的元组的文本表示,而不需要与Python的相同,您可以这样做。:

'(%s)' % ', '.join(map(repr, testa))
bjg7j2ky

bjg7j2ky2#

要写一个包含单个值的元组,你必须包含一个逗号,即使只有一个值。
您可以对元组进行索引以获得所需的输出:

print testa[0]
>>>> 1234
t5zmwmid

t5zmwmid3#

其实你不必这么做。冒号就在元组的字符串表示中。例如,您可以创建自己的字符串

print "(%s)" % ",".join(testa)
ffx8fchx

ffx8fchx4#

这就是python显示单值元组的方式,还要注意,创建单值元组的推荐语法也是x = (1,),这有助于区分元组和函数调用。如果你真的想要一个像你描述的那样的输出,你可以试试

testa = tuple([k['id'] for k in queryset.values('id')])
if len(testa)==1:
     print '(%s)'%testa[0]
else:
     print testa
4jb9z9bj

4jb9z9bj5#

你说你想要一个列表,但事实上你正在创建一个元组。
要获取ID列表,请查看values_list

>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
>>> Entry.objects.filter(id=1).values_list('id', flat=True)
[1]
az31mfrm

az31mfrm6#

在Python 3中:

testa_tup = testa # where testa is the tuple you want to turn to string for SQL
testa = ""
for c in testa_tup:
    testa += "," + str(c)
testa = testa[1:]

然后格式化SQL:

"SELECT * FROM table WHERE value IN ({testa})"
azpvetkf

azpvetkf7#

str(tuple(testa)).replace(",)",")")

相关问题