在Django項目中,我有兩個元組列表。兩個列表中的每個元組都包含(user_id, epoch_time_of_joining)
對。第一個列表是所有用戶列表。第二個列表是新用戶列表,僅包含在過去24小時內加入的ID。 FYI,所有用戶列表包含新用戶列表,並且這兩個列表根據epoch_time_of_joining
(它們實際上是Redis排序集)排序。例如: -根據外部參數有效地檢索和排序對象列表(Django)
all_users = [('16', 1489044722.035625), ('5', 1489561316.306984), ('104', 1498151886.155885), ('3', 1498158931.476488), ('2', 1498158953.978909)]
new_users = [('3', 1498158931.476488), ('2', 1498158953.978909)]
的任務是獲取,使得它是由最新的用戶第一次分揀通過Django的ORM,所有用戶對象的統一對象列表。當它們膨脹到100以上時,我也必須對結果進行分頁。最後,我必須跟蹤此統一列表中的最新用戶,以便我可以在界面中顯示「新」標籤。
完成上述任務最有效率的是什麼?我無法完全包裹我的腦袋,無法有效地做到這一點。我目前正在嘗試:
# COMBINE THE TWO LISTS, DROP TIME, BUT KEEP SORTING INTACT
combined_users = []
for (user_id,time) in all_users:
if (user_id,time) in new_users:
combined_users.append((user_id,1))
else:
combined_users.append((user_id,0))
# GET TUPLE LIST RELEVANT FOR CURRENT PAGE
page_obj = get_page_obj(page_num,combined_users,100)
#RETRIEVE RELEVANT USER OBJECTS
user_objs = User.objects.select_related('userprofile').filter(id__in=[user[0] for user in page_obj.object_list])
# USING NESTED FOR LOOPS TO CREATE FINAL LIST
users = []
for (user_id,is_new) in page_obj.object_list:
for user_obj in user_objs:
if obj.id == user_id:
users.append((obj,is_new))
這可行,但它使用嵌套for循環。用戶名單廣泛而且不斷增長,所以我更喜歡更高效的執行方式。我想知道我是否可以在不丟失排序的情況下以某種方式使用字典,但就像我之前說過的那樣,這不是我要來的。
在「#ETREIEVE RELEVANT USER OBJECTS」之後的行中不能使用order_by函數嗎? –
@ArpitSolanki:不能使用'order_by()'方法,因爲在這種情況下,'User'對象不包含我需要排序的相關時間屬性。因此,問題標題中的術語「外部參數」。 –