【问题标题】:How to remove extra ',' in tuple in django(python)如何在django(python)的元组中删除多余的','
【发布时间】:2011-05-21 13:59:50
【问题描述】:

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

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

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

(1234,)

除此之外还可以

(1234,1244)

如何删除多余的 ', in list'

【问题讨论】:

  • 你不应该在你的 django 应用中使用print
  • 列表中没有多余的,。它是一个包含一个元素的元组。你的问题到底是什么?如果不想打印为(1234,),可以使用", ".join(str(x) for x in testa)
  • 这就像说“我打印了 pi 的值,但在 3 之后有一个句点” - 逗号并不是元组的一部分,它只是在那里显示它一个元组。
  • 这在使用 SQL 查询 WHERE 子句中的元组作为参数时很有用。见stackoverflow.com/questions/283645/…

标签: python django


【解决方案1】:
(1234,)

是 1 元组的正确 Python 表示。 (1234) 是错误的,因为它被视为数学括号中的简单整数,计算结果为 1234,而不是包含它的元组。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    print testa[0]
    >>>> 1234
    

    【讨论】:

      【解决方案3】:

      实际上你不必这样做。冒号就在元组的字符串表示中。例如,您可以通过

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 我需要id列表用于sql语句。我需要在'..in(id列表)'中使用它。如果id是单一的,它将产生'..in( id,)' 哪里会产生sql错误
        【解决方案5】:

        你说你想要一个列表,但实际上你正在创建一个元组。

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-07-02
            • 2021-02-28
            • 2020-12-19
            • 2015-11-09
            • 2021-04-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多