18

次のような辞書の辞書(これはより大きな辞書のキーでもあります)を持っています

wd[wc][dist][True]={'course': {'#': 1, 'Fisher': 4.0},
 'i': {'#': 1, 'Fisher': -0.2222222222222222},
 'of': {'#': 1, 'Fisher': 2.0},
 'will': {'#': 1, 'Fisher': 3.5}}

出力が次のようになるように、キーワードを (最高レベルで) 対応する「フィッシャー」値で並べ替えたい

wd[wc][dist][True]={'course': {'Fisher': 4.0, '#': 1}, 'will': {'Fisher': 3.5, '#': 1}, 'of': {'Fisher': 2.0, '#': 1}, 'i': {'Fisher': -0.2222222222222222, '#': 1}}

私は items() と sorted() で作業しようとしましたが、うまくいきません...助けてください:(

4

2 に答える 2

36

辞書をソートすることはできませんが、キー、値、または (キー、値) ペアのソートされたリストを取得できます。

>>> dic = {'i': {'Fisher': -0.2222222222222222, '#': 1}, 'of': {'Fisher': 2.0, '#': 1}, 'will': {'Fisher': 3.5, '#': 1}, 'course': {'Fisher': 4.0, '#': 1}}

>>> sorted(dic.items(), key=lambda x: x[1]['Fisher'], reverse=True)
[('course', {'Fisher': 4.0, '#': 1}),
 ('will', {'Fisher': 3.5, '#': 1}),
 ('of', {'Fisher': 2.0, '#': 1}),
 ('i', {'Fisher': -0.2222222222222222, '#': 1})
]

またはcollections.OrderedDict、ソートされた (キー、値) ペアを取得した後に (Python 2.7 で導入された) を作成します。

>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(dic.items(), key=lambda x: x[1]['Fisher'], reverse=True))
>>> od
OrderedDict([
('course', {'Fisher': 4.0, '#': 1}),
('will', {'Fisher': 3.5, '#': 1}),
('of', {'Fisher': 2.0, '#': 1}),
('i', {'Fisher': -0.2222222222222222, '#': 1})
])

あなたの辞書については、これを試してください:

>>> from collections import OrderedDict
>>> dic = wd[wc][dist][True]
>>> wd[wc][dist][True]= OrderedDict(sorted(dic.items(), key=lambda x: x[1]['Fisher'], reverse=True))
于 2013-05-07T06:31:29.123 に答える
4

順番にキーが必要な場合は、次のようなリストを取得できます

dic = {'i': {'Fisher': -0.2222222222222222, '#': 1}, 'of': {'Fisher': 2.0, '#': 1}, 'will': {'Fisher': 3.5, '#': 1}, 'course': {'Fisher': 4.0, '#': 1}}
sorted(dic, key=lambda k: dic[k]['Fisher'])

「Fisher」が見つからない可能性がある場合は、これを使用してそれらのエントリを最後に移動できます

sorted(dic, key=lambda x:dic[x].get('Fisher', float('inf')))

または'-inf'それらを最初に配置する

于 2013-05-07T07:09:37.110 に答える