2013-05-07 7 views
11

मैं एक dict dicts के लग रहा है किपायथन: शब्दकोशों

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

मैं (उच्चतम स्तर पर) प्रमुख शब्दों द्वारा क्रमबद्ध करना चाहते हैं (जो भी एक बड़ा dict की एक प्रमुख है) की छंटाई शब्दकोश उनकी संगत 'फिशर' मूल्य ... तो उत्पादन लग रहा है कि

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

मैं काम कर रहा आइटम के साथ()) की कोशिश की है और अनुसार क्रमबद्ध (लेकिन यह काम नहीं कर सकते हैं ... कृपया मेरी मदद करो आउट :(

+4

पर जगह कर सकते हैं दुर्भाग्य से आप एक शब्दकोश क्रमबद्ध नहीं कर सकते, यह अव्यवस्थित है। पॉइंटर्स के लिए यह शानदार पोस्ट पढ़ें कि इसे कैसे करें: http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value –

उत्तर

24

आप एक dict सॉर्ट नहीं कर सकते हैं, लेकिन कुंजी, मान या (कुंजी, मान) जोड़े की एक क्रमबद्ध सूची प्राप्त कर सकते हैं।

>>> 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 (अजगर 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)) 
+1

ध्यान दें कि ['ऑर्डर डिक्ट'] (http: // docs। python.org/2/library/collections.html?highlight=ordereddict#ordereddict-examples-and-recipes) केवल पायथन संस्करण 2.7 और ऊपर के लिए है। –

+0

आइटम का उपयोग कर() परिणाम KeyError में ... यह क्यों हो सकता है? – ytrewq

+0

@CosmicRabbitMediaInc आपके शब्दकोशों में से एक में 'फिशर' कुंजी नहीं हो सकती है, क्या यह सही है? डी में सभी के लिए '(फिशर' डी 'के लिए डी' के लिए कोशिश करें 'और पोस्ट आउटपुट – jamylak

3

हैं आपको बस क्रम में चाबियों की आवश्यकता है, आप इस तरह की एक सूची प्राप्त कर सकते हैं

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']) 

अगर 'फिशर' अनुपलब्ध हो सकता है, आप इसका उपयोग उन प्रविष्टियों पिछले

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

या '-inf' स्थानांतरित करने के लिए उन्हें शुरुआत

संबंधित मुद्दे