如何在django(python)中删除元组中的额外','

时间:2011-05-21 13:59:50

标签: python django

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

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

如果在查询集中只有1个id,则会显示

(1234,)

除了确定

(1234,1244)

如何在列表中删除额外的'

6 个答案:

答案 0 :(得分:11)

(1234,)

是1元组的正确Python表示。 (1234)会出错,因为它被视为数学括号中的一个简单整数,评估为1234,而不是包含它的元组。

这对于列表是不同的,因为方括号没有这个双重目的也意味着数学操作顺序,所以虽然[1234][1234,]都是长度的有效表示 - 1列表,默认文本表示可以没有额外的逗号。

如果您正在设计一个不需要与Python相同的元组的文本表示,您可以这样做:

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

答案 1 :(得分:2)

要编写包含单个值的元组,您必须包含逗号,即使只有一个值。

您可以索引元组以获得所需的输出:

print testa[0]
>>>> 1234

答案 2 :(得分:1)

实际上你没必要。冒号是元组的字符串表示。例如,您可以通过

创建自己的字符串
print "(%s)" % ",".join(testa)

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

哟说你想要一个清单,但事实上你要创建一个元组。

要获取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]

答案 5 :(得分:0)

在 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})"