I have a dict (which is also a key of a larger dict) of dicts that looks like
wd[wc][dist][True]={'course': {'#': 1, 'Fisher': 4.0},
'i': {'#': 1, 'Fisher': -0.2222222222222222},
'of': {'#': 1, 'Fisher': 2.0},
'will': {'#': 1, 'Fisher': 3.5}}
I want to sort the key words (at the highest level) by their corresponding 'Fisher' value...
so that the output looks like
wd[wc][dist][True]={'course': {'Fisher': 4.0, '#': 1}, 'will': {'Fisher': 3.5, '#': 1}, 'of': {'Fisher': 2.0, '#': 1}, 'i': {'Fisher': -0.2222222222222222, '#': 1}}
I've tried working with items() and sorted() but can't work it out...
Please help me out :(
解决方案
You can't sort a dict, but can get a sorted list of keys, values or (key,values) pairs.
>>> 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})
]
Or create an collections.OrderedDict(introduced in Python 2.7) after getting the sorted (key,value) pairs:
>>> 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})
])
For your dictionary, try this:
>>> 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))