2011-05-25 127 views
3

我正在使用python來管理要處理的字符串隊列。它有幾個要求:是否有可排序和可搜索的Python數據結構?

  • 每個字符串都匹配到一個優先級,並完全基於該值進行處理。
  • 可以動態地將字符串添加到此隊列中,但隊列中不允許有重複的字符串。如果提交副本,則必須標識並忽略它。

那麼有什麼python數據類型,將允許這樣的事情?或者我必須寫我自己的?

如果沒有一個本地的,那麼我想維護兩個結構。

  1. 一個heapq將保持字符串及其優先
  2. 一個list其保持串的散列以檢查字符串是否已存儲

只要這些不會掉落同步它應該解決問題。

+2

爲什麼不是字典?或ordereddict? – utdemir 2011-05-25 16:12:04

+3

@utdmr:按值對字典排序並不是很好。 – Daenyth 2011-05-25 16:12:32

回答

5

這聽起來像一個合理的方法。我會使用set而不是list,因爲它具有更高效的會員資格檢查,並且您不需要維護訂單(因爲您在heapq中執行此操作)

+0

絕對應該使用'set' – FogleBird 2011-05-25 17:06:24

2

有序字典可能有幫助。

看到這個頁面(an ordered dictionary)它指出:

的有序字典保持在鑰匙插入順序。這有時稱爲創建的訂單字典。

字典中存在潛在的用例,它們保持按鍵順序,但排序基於其他標準。

您可以自由使用的setkeys方法改變順序,但你可能更喜歡使用這些不同的標準字典。例如,您可能需要一個字典,按照最後訪問的鍵的順序保存鍵。

+0

所以我將字符串的優先級作爲鍵和值作爲字符串,然後我可以根據鍵的值進行排序?我將如何檢查該字符串是否已存在於隊列中? – 2011-05-26 06:43:44