2013-04-17 41 views
0

根據多個鍵對詞典列表排序的最佳(時間)方法是什麼?同時刪除一些詞典輸出的字典?根據多個鍵對詞典列表進行排序並刪除某些詞典的最佳方法

我希望輸出成爲所有字典的列表,其中"protected":0由任意數量的其他鍵排序。

數據

[{"raffle_id":"81","created":"2013-01-07 19:47:57","instant":"1","protected":0,"expire":"never","ticket_price":"0.00050000", 
"tickets_total":"10","tickets_sold":"1","my_tickets_count":"1"}, 
{"raffle_id":"83","created":"2013-01-07 19:49:20","instant":"0","protected":1,"expire":"4d 23h 59m","ticket_price":"0.01000000", 
"tickets_total":"50","tickets_sold":"0","my_tickets_count":"0"}] 

當前方法

raffle_list = [raffle for raffle in raffle_list if raffle("protected") == "0"] 

sorted_raffles = sorted(raffles_list, key = operator.itemgetter("ticket_price", "tickets_sold", "my_tickets_count", "tickets_total")) 
+3

其實,這很可能是最有效的方式來做到這一點。你在談論原始速度嗎? – jamylak

+0

是的,它需要儘可能快。我希望有一些簡單的方法來結合這兩個操作,所以列表不需要遍歷兩次。 – LJNielsenDk

+1

你已經完成了所有的事情,你唯一可以嘗試的就是使'raffle_list'成爲一個生成器,例如。 '(如果抽獎(「保護」)==「0」),但是列表解析在實際上更快......因爲'sorted'會生成另一個副本,所以只保存一次列表複製到內存中的抽獎(raffle在raffle_list中)將不得不測試它 – jamylak

回答

1

所有我可以建議正在raffle_list發電機但根據數據和存儲器可用的可以/不可以更快。例如。清單譜曲是小數據集速度快,但發電機避免使內存中的一個副本,這可能會提高速度龐大的數據集,因爲sorted進行復印,以及:

(raffle for raffle in raffle_list if raffle("protected") == "0")