如何在Python中对字典进行排序

问题描述:

这是我的问题。我得到这个如何在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

您不能对Python中的词典,它们是天生无序。

虽然你可以sort the keys(),它创建一个列表,然后使用该列表以虚假有序的方式访问元素。

+0

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

试试这个

>>> 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

我有这个[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