2011-04-08 119 views
0

如果我使用的是不正確的術語,那麼我對此表示歉意,因爲在涉及到數據結構的正確描述時,我有點像Python n00b。按照Python中的內部字典中的值對字典進行排序

我有一個數據結構,看起來像這樣:

{ 
    u'COU': {'hl': 39, 'hw': 42, 'winPct': Decimal('0.5471698113207547169811320755'), 'al': 36, 'l': 72, 'w': 87, 'aw': 45}, 
    u'MIN': {'hl': 42, 'hw': 39, 'winPct': Decimal('0.3559322033898305084745762712'), 'al': 57, 'l': 114, 'w': 63, 'aw': 24}, 
    u'BOW': {'hl': 36, 'hw': 44, 'winPct': Decimal('0.5432098765432098765432098765'), 'al': 37, 'l': 74, 'w': 88, 'aw': 44} 
} 

我想作爲排序依據的內部字典裏面winPct值這個數據結構,並在網上搜索曾透露建議的琳琅滿目,使無對這個在PHP開發者身上提出的意見。

在此先感謝您的幫助。

+0

好吧,首先,字典沒有順序。你可以,也許,提取鍵/值作爲一個列表並排序 – varzan 2011-04-08 23:57:11

+0

@varzan有序的字典確實存在。 – 2011-04-08 23:59:21

回答

2

您無法對字典進行排序,但可以將字典轉換爲形式爲(key, value)的元組列表。

sorted_d = sorted(d.iteritems(), key=lambda v: v[1]['winPct']) 

顛倒排序按您的評論使用:

sorted_d = sorted(d.iteritems(), key=lambda v: v[1]['winPct'], reverse=True) 
+0

工作,但是從最小到最大,我將如何排序他們,以便它最大最小? – GrumpyCanuck 2011-04-09 00:04:15

+0

@GrumpyCanuck:在排序的調用中添加'reverse = True' – GWW 2011-04-09 00:05:25

+0

完美工作。謝謝! – GrumpyCanuck 2011-04-09 00:35:42

0

你的數據結構是一本字典和詞典沒有對它們內部的關聯排序,所以我打算將「對此數據結構進行排序」解釋爲「從該數據結構中創建包含(鍵,值)對的列表」。這可能是也可能不是你想要的。因此,首先,讓那些對:

pairs = d.items() 

(注:此方法返回一個列表在Python 2,我認爲它返回在Python 3別的東西,爲此,你需要調用list()明確作出它可以分類,或者撥打sorted而不是sort)。現在根據你的標準排序:

pairs.sort(key = lambda (k,v): v['winPct']) 

現在pairs包含什麼(可能)你想要的。