0

これが私の問題です。私はこれを得た

{'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'}}

そして、私はそれを最初に性別、次にイベントと最後の時間でソートする必要があります(PB-最初に最も速い)

4

3 に答える 3

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'})])
于 2012-04-11T12:14:20.960 に答える
2

Python で辞書をソートすることはできません。辞書は本質的に順不同です。

ただし、リストを作成するkeys()を並べ替えてから、そのリストを使用して、偽の順序で要素にアクセスできます。

于 2012-04-11T11:47:28.697 に答える
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'}
>>> 
于 2012-04-11T12:02:03.870 に答える