2012-04-11 60 views
0

這是我的問題。我得到這個如何在Python中對字典進行排序

{'Ciaran Johnson': {'PB': 58.2, 
        'Gender': 'M', 
        'Age': 6, 
        'Event': 'IM', 
        'Name': 'Ciaran Johnson'}, 
'Joan Pine': {'PB': 44.0, 
       'Gender': 'F', 
       'Age': 6, 
       'Event': 'FS', 
       'Name': 'Joan Pine'}, 
'Eric Idle': {'PB': 57.2, 
       'Gender': 'M', 
       'Age': 6, 
       'Event': 'IM', 
       'Name': 'Eric Idle'}, 
'Kirsty Laing': {'PB': 58.2, 
        'Gender': 'F', 
        'Age': 6, 
        'Event': 'IM', 
        'Name': 'Kirsty Laing'}} 

,我必須對它進行排序按性別firsty,那麼事件和lastle時間(PB -the最快的是第一)

+1

...您試過了什麼?你知道字典不能用python排序嗎? – Simon 2012-04-11 11:46:34

回答

2

您不能對Python中的詞典,它們是天生無序。

雖然你可以sort the keys(),它創建一個列表,然後使用該列表以虛假有序的方式訪問元素。

+0

非常感謝您的幫助! – Adriano 2012-04-11 13:06:55

0

試試這個

>>> for k,v in sorted(spam.items(),key=lambda k:(k[1]['Gender'],k[1]['Age'],k[1]['PB'])): 
    print(k,v) 


Joan Pine {'PB': 44.0, 'Gender': 'F', 'Age': 6, 'Event': 'FS', 'Name': 'Joan Pine'} 
Kirsty Laing {'PB': 58.2, 'Gender': 'F', 'Age': 6, 'Event': 'IM', 'Name': 'Kirsty Laing'} 
Eric Idle {'PB': 57.2, 'Gender': 'M', 'Age': 6, 'Event': 'IM', 'Name': 'Eric Idle'} 
Ciaran Johnson {'PB': 58.2, 'Gender': 'M', 'Age': 6, 'Event': 'IM', 'Name': 'Ciaran Johnson'} 
>>> 
+0

非常感謝您的幫助! – Adriano 2012-04-11 13:07:05

3

我有這個[dict]我必須對它進行排序...

不能排序dict,因爲標準字典是無序的。但是,您可以使用OrderedDict

In [2]: from collections import OrderedDict 

In [3]: sd = OrderedDict(sorted(d.items(), key=lambda (k,v): (v['Gender'], v['Event'], v['PB']))) 

In [4]: sd 
Out[4]: OrderedDict([('Joan Pine', {'PB': 44.0, 'Gender': 'F', 'Age': 6, 'Event': 'FS', 'Name': 'Joan Pine'}), ('Kirsty Laing', {'PB': 58.2, 'Gender': 'F', 'Age': 6, 'Event': 'IM', 'Name': 'Kirsty Laing'}), ('Eric Idle', {'PB': 57.2, 'Gender': 'M', 'Age': 6, 'Event': 'IM', 'Name': 'Eric Idle'}), ('Ciaran Johnson', {'PB': 58.2, 'Gender': 'M', 'Age': 6, 'Event': 'IM', 'Name': 'Ciaran Johnson'})]) 
+0

非常感謝您的幫助! – Adriano 2012-04-11 13:06:47

相關問題