我在使用django构建id列表时遇到了一个问题。如果我选择了多于1个id,它可以,但如果我只选择一个,它将在列表中产生额外的','。
testa = tuple([k['id'] for k in queryset.values('id')]) print testa
如果在查询集中正好有1个id,它将显示
(1234,)
除此之外还可以
(1234,1244)
如何删除列表中多余的','
swvgeqrz1#
是1元组的正确Python表示。(1234)是错误的,因为它被视为数学括号中的简单整数,计算为1234,而不是包含它的元组。这对于列表来说是不同的,因为方括号没有这种双重用途,也意味着数学运算顺序,所以虽然[1234]和[1234,]都是长度为1的列表的有效表示,但默认的文本表示可以没有额外的逗号。如果您正在设计自己的元组的文本表示,而不需要与Python的相同,您可以这样做。:
(1234)
1234
[1234]
[1234,]
'(%s)' % ', '.join(map(repr, testa))
bjg7j2ky2#
要写一个包含单个值的元组,你必须包含一个逗号,即使只有一个值。您可以对元组进行索引以获得所需的输出:
print testa[0] >>>> 1234
t5zmwmid3#
其实你不必这么做。冒号就在元组的字符串表示中。例如,您可以创建自己的字符串
print "(%s)" % ",".join(testa)
ffx8fchx4#
这就是python显示单值元组的方式,还要注意,创建单值元组的推荐语法也是x = (1,),这有助于区分元组和函数调用。如果你真的想要一个像你描述的那样的输出,你可以试试
x = (1,)
testa = tuple([k['id'] for k in queryset.values('id')]) if len(testa)==1: print '(%s)'%testa[0] else: print testa
4jb9z9bj5#
你说你想要一个列表,但事实上你正在创建一个元组。要获取ID列表,请查看values_list
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]
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})"
azpvetkf7#
str(tuple(testa)).replace(",)",")")
7条答案
按热度按时间swvgeqrz1#
是1元组的正确Python表示。
(1234)
是错误的,因为它被视为数学括号中的简单整数,计算为1234
,而不是包含它的元组。这对于列表来说是不同的,因为方括号没有这种双重用途,也意味着数学运算顺序,所以虽然
[1234]
和[1234,]
都是长度为1的列表的有效表示,但默认的文本表示可以没有额外的逗号。如果您正在设计自己的元组的文本表示,而不需要与Python的相同,您可以这样做。:
bjg7j2ky2#
要写一个包含单个值的元组,你必须包含一个逗号,即使只有一个值。
您可以对元组进行索引以获得所需的输出:
t5zmwmid3#
其实你不必这么做。冒号就在元组的字符串表示中。例如,您可以创建自己的字符串
ffx8fchx4#
这就是python显示单值元组的方式,还要注意,创建单值元组的推荐语法也是
x = (1,)
,这有助于区分元组和函数调用。如果你真的想要一个像你描述的那样的输出,你可以试试4jb9z9bj5#
你说你想要一个列表,但事实上你正在创建一个元组。
要获取ID列表,请查看
values_list
az31mfrm6#
在Python 3中:
然后格式化SQL:
azpvetkf7#