2016-01-13 32 views
3

我做了一個查詢以獲取模型中的所有字段值。我將結果存儲在一個查詢集中。如何刪除Django中每個列表值之後的「L」

queryset=Books.objects.filter(book_type="comic") 

現在,當我過濾此查詢集:

query=queryset.filter(~Q(auther_id=1)) 
autherList=[] 
for q in query: 
    autherList.append(q.auther_id) 
print autherList 

它打印的清單爲:

[3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 

我的問題是:什麼是該L表示,如何去除它來獲得一個簡單的ID列表。

我看着這個,但找不到任何關於這個。

回答

7

L表示項目爲long類型。

底層數據庫庫(mysql可能?)正在創建long類型,同時從數據庫中獲取它們。所以他們是long而不是普通的舊int

您可以使用int函數將它們轉換爲整數。

>>> lng_number = 23L 

>>> int_num = int(lng_number) 

>>> int_num 
23 

如果所有的值是long類型的,你可以使用map這樣的:

>>> long_list = [1L, 3L, 10L] 

>>> int_list = map(int, long_list) 

>>> int_list 
[1, 3, 10] 

>>> 
+0

可以寫成列表理解,它比map()更具可讀性:'int_list = [long_list中item的int(item)]''。 – jotrocken

3

這不是一個文字L,它代表數據類型long。這只是一個命令行表示,您不應該擔心它,因爲它只會爲您的模型id字段保存更多數字。

+0

ids被存儲爲int,那麼它是如何變成「long」數據類型的。 –

+0

其自動生成的auther id在我的數據庫中顯示int類型。 –

+0

我在我的問題中回答了它。它取決於底層的數據庫庫。 – masnun

1
Try this one 

[3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 

use this :: 
remove_extra = [int(item_list) for item_list in remove_extra] 


****** if you want to remove duplicate value from list then use **set()** 

like this:: 


**list(set(remove_extra))** 
+1

爲什麼不簡單使用'map'? – masnun

+0

@AbuAshrafMasnun ....你不需要在你的列表中理解地圖。地圖創建另一個列表,所以你最終列出一個列表。 –

+0

我不是指在列表理解中使用映射。你可以使用它來代替列表理解。 – masnun

2

我已經嘗試這樣做,它的工作原理

>>> a = [3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 
>>> b = map(int,a) 
>>> b 
[3, 4, 9, 13, 53, 53, 102, 111, 111, 111, 111] 

但你不必擔心它,因爲Python把它當作數字

>>> a = [3L, 4L, 9L, 13L, 53L, 53L, 102L, 111L, 111L, 111L, 111L] 
>>> b = [c*2 for c in a] 
>>> b 
[6L, 8L, 18L, 26L, 106L, 106L, 204L, 222L, 222L, 222L, 222L] 
相關問題