2011-05-21 38 views
2

我在使用django構建id列表時遇到了一個問題。如果我選擇超過1個ID它確定,但如果我只選擇一個它會在列表中產生額外的','。如何在django(python)中刪除元組中多餘的','

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

如果在查詢集恰好有1號,它會顯示

(1234,) 

以外,它確定

(1234,1244) 

如何刪除多餘的 '在列表'

+1

你不應該永遠在你的Django應用程序了'print'。 – hop 2011-05-21 14:04:52

+1

列表中沒有額外的','。它是一個元素的元組。你確切的問題是什麼?如果你不想把它打印成'(1234,)',你可以使用'「,」.join(str(x)for testa中的x)'。 – khachik 2011-05-21 14:10:03

+0

這就好像在說「我打印了pi的值,但在3之後有一段時間 - 逗號並不是真正的元組的一部分,它只是在那裏顯示它是一個元組。 – PaulMcG 2011-05-21 14:35:11

回答

2

要編寫包含單個值的元組,您必須包含逗號,即使只有一個值。

你可以索引元組,以獲得所需的輸出:

print testa[0] 
>>>> 1234 
1

其實你不必。冒號只是在元組的字符串表示中。例如,你纔可以通過

print "(%s)" % ",".join(testa) 
10
(1234,) 

創建自己的字符串是1元組的正確的Python表示。 (1234)將是錯誤的,因爲它被視爲一個簡單的數學圓括號,評估爲1234,而不是包含它的元組。

這是列出不同的,因爲在方括號沒有也意味着mathemtical訂單操作,這雙重目的,因此而[1234]和​​是一個長度爲1的列表中都有效交涉,默認的文本表示可以沒有額外的逗號。

如果你正在設計並不需要是相同的Python的一個元組自己的文字表述,你可以做如:

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

這就是如何蟒蛇顯示單值的元組,還要注意,用單值創建元組的推薦語法也是x = (1,),這有助於區分元組和函數調用。 如果你真的想要的輸出像你描述你可以嘗試

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

只是想知道你在django需要它嗎? – 2011-05-21 14:07:35

+0

我需要用於sql語句的id列表。我需要在'..in(list of id)'中使用它。如果id是單個,它將生成'..in(id,)',其中將生成sql錯誤 – Najmi 2011-05-21 14:25:56

1

呦說你想要一個清單,但事實上你正在創建一個元組。

爲了得到一個列表的IDS看看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]