How to remove extra ',' in tuple in django(python)

后端 未结 5 1261
长情又很酷
长情又很酷 2021-01-06 07:45

I have one problem in building a list of id using django. if i choose more than 1 id it ok but if i choose only one it will produce extra \',\' in list.

test         


        
相关标签:
5条回答
  • 2021-01-06 07:57

    To write a tuple containing a single value you have to include a comma, even though there is only one value.

    You can index the tuple to get the desired output:

    print testa[0]
    >>>> 1234
    
    0 讨论(0)
  • 2021-01-06 07:57

    thats' how python displays the tuples with single values , also note that the recommended syntax for creating a tuple with single value is also x = (1,) that helps in differentiating a tuple from a function call . If you really want an output like you describe you can try

    testa = tuple([k['id'] for k in queryset.values('id')])
    if len(testa)==1:
         print '(%s)'%testa[0]
    else:
         print testa
    
    0 讨论(0)
  • 2021-01-06 07:58

    actually you don't have to. the colon sign is just there in a string representation of the tuple. For example you can just create your own string by

    print "(%s)" % ",".join(testa)
    
    0 讨论(0)
  • 2021-01-06 08:04
    (1234,)
    

    is the correct Python representation of a 1-tuple. (1234) would be wrong as that is taken as a simple integer in mathematical parentheses, evaluating to 1234, not a tuple containing it.

    This is different for lists because the square brackets don't have this double purpose of also meaning mathemtical order-of-operations, so whilst [1234] and [1234,] are both valid representations of a length-1-list, the default textual representation can be without the extra comma.

    If you are devising your own textual representation of a tuple that does not need to be the same as Python's, you could do eg.:

    '(%s)' % ', '.join(map(repr, testa))
    
    0 讨论(0)
  • 2021-01-06 08:10

    Yo say you want a list but de facto you are creating a tuple.

    To get a list of ids take a look at 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]
    
    0 讨论(0)
提交回复
热议问题