2009-12-11 146 views
0

我目前正在用Python編寫一個程序來跟蹤視頻遊戲的統計數據。該辭典的例子我使用跟蹤分數:如何對字典中的數組進行排序?

ten = 1 
sec = 9 
fir = 10 
thi5 = 6 
sec5 = 8 

games = { 
     'adom': [ten+fir+sec+sec5, "Ancient Domain of Mysteries"], 
     'nethack': [fir+fir+fir+sec+thi5, "Nethack"] 
     } 

現在,我要對這個硬盤的方式,並進行嵌套IFS的大名單很長,但我不認爲這是正確的方式去做。我試圖找出一種方法來通過數組對字典進行排序,然後找到一種方法來顯示彈出的前十個字符......而不必深入if語句。

所以......基本上,我的問題是:你有什麼想法可以用來使這更容易,而不是wayyyy,更難嗎?

=====編輯====

ten + fir會產生數字。我想找到一種方法去排序列表(我缺乏正確的術語知識)去數字(基本上,無論哪個在數組的第一部分中具有最高數字先去。

這裏是我目前的打算吧(雖然這樣的例子,它是不完整的,因爲它是非常煩人:Example Nests (paste2)(讓我們試試這個)

====第二個編輯====

在?如果有人沒有看到我的評論如下:

ten,fir等ettera - 這些只是變數的分數。基本上,它走從前十名列表變成一個可變數字。ten = 1,nin = 2,fir = 10,fir5 = 10,sec5 = 8,sec = 9 ... so:'adom':[ten + fir + sec + sec5,「Ancient Domain of Mysteries」 ]實際上註冊爲:'盾會':[1 + 10 + 9 + 8, 「神祕古域」],這最終看起來像:

'盾會':[28,「古域神祕「]

所以,基本上,如果我最後做了‘前兩名’我的例子中,它會是:

((1))Nethack(48)

((2))ADOM(28)

我會寫一個實際的數字,但我想改變一些東西的,所以這些數字可能會有所不同,我不想重寫它。

== THIRD(希望決賽)EDIT ==

固定我的原始的代碼示例。

+1

「Arrays」?你的意思是「列表」?請更新問題。 – 2009-12-11 15:55:08

+0

我不確定十+ fir + sec + sec5如何與示例代碼中的變量名稱相關,但您可能會很高興的知道:如果您只是調用'sort(array)',其中的所有元素'array'本身就是列表或元組,排序將首先由列表/元組的第一個元素自動排序,然後排序第二個元素等。 – Wim 2009-12-11 16:24:17

+0

更新您的示例以顯示實際結構。 'ten + fir'是一個數字還是一個數字列表?你也不需要\因爲你的陳述有'{}'s。 – 2009-12-11 16:25:48

回答

3

怎麼是這樣的:

scores = games.items() 
scores.sort(key = lambda key, value: value[0]) 
return scores[:10] 

這將返回第10個項目,由數組中的第一項進行排序。 我不確定這是不是你想要的,但如果你需要別的東西,請更新問題(並修復示例鏈接)。

2
import heapq 

return heapq.nlargest(10, games.iteritems(), key=lambda k, v: v[0]) 

是獲得前10個鍵/值對的最直接方式,按每個「值」列表的第一項進行排序。如果你可以更精確地定義你想要的輸出(只是名稱,名稱/值對,還有其他什麼?)和排序標準,這當然很容易調整。

0

Wim的解決方案很好,但我會說你應該多花一點時間,把這項工作推到數據庫上,而不是依靠Python。 Python與大多數類型的數據庫很好地接口,其中大部分探索的內容已經解決了。例如,您可以簡單地根據查詢條件對每個相關條目進行預先排序,而不用擔心將詞典轉換爲其他各種數據類型以便對其進行正確排序。需要進行復雜的分類和在那裏採取行動。

雖然字典很有吸引力,但由於它們給出了類似於數據庫的能力以根據其屬性訪問數據的錯覺,我仍然認爲它們在實現方面有點磕磕絆絆。我沒有任何數字可以拋棄你,但僅僅從個人經驗來看,當你涉及操縱大量數據時,你在Python上做的任何事情,你可以在代碼和計算方面做得更快,更高效MySQL的。

就數據結構而言,我不確定您計劃的是什麼,但隨着添加數據,使用數據庫更改結構也變得更容易。

+0

定義**大** ;-)多達幾百個項目,我猜測性能將會與僅使用Python的實現非常相似,同時爲您節省大量安裝headackes。這一切都取決於(tm)在許多我們不知道的環境條件,然而... – Wim 2009-12-11 16:22:02

+1

-1:不同意。與數據庫相比,Python有許多優點。 Python字典,列表和'sorted'函數將很好地完成這個任務,而不會增加SQL的複雜性。數據庫有助於數據需要併發訪問。否則,Python結構適用於任何適合內存的數據庫。 – 2009-12-11 16:34:39

+0

數據庫會產生很多開銷。 – recursive 2009-12-11 17:15:00

相關問題