2012-10-25 18 views
7

में सॉर्ट dict करने के लिए एक dict परिवर्तित मैं अजगर में सॉर्ट dict में एक dict कनवर्ट करना चाहते हैंअजगर

data = pandas.read_csv('D:\myfile.csv') 
for colname, dtype in data.dtypes.to_dict().iteritems(): 
    if dtype == 'object': 
     print colname 
     count = data[colname].value_counts() 
     d = dict((str(k), int(v)) for k, v in count.iteritems()) 
     f = dict(sorted(d.iteritems(), key=lambda item: item[1], reverse = True)[:5]) 
     print f 

     m ={} 
     m["count"]= int(sum(count))  
     m["Top 5"]= f  
     print m  
     k = json.dumps(m) 
     print k  
f = {'Gears of war 3': 6, 'Batman': 5, 'gears of war 3': 4, 'Rocksmith': 5, 'Madden': 3} 

मेरे वांछित आउटपुट है:

f = {'Gears of war 3': 6, 'Batman': 5, 'Rocksmith': 5, 'gears of war 3': 4, 'Madden': 3} 
k = {'count':24, 'top 5':{'Gears of war 3': 6, 'Batman': 5, 'Rocksmith': 5, 'gears of war 3': 4, 'Madden': 3}} 

(मूल्यों और के अवरोही क्रम में परिणाम एक dict होना चाहिए)

+1

आप केवल क्रमबद्ध सूची के बजाय ऐसा क्यों करना चाहते हैं? – emschorsch

उत्तर

15

आप dict को सॉर्ट नहीं कर सकते क्योंकि शब्दकोश में कोई ऑर्डर नहीं है।

इसके बजाय, collections.OrderedDict का उपयोग करें:

>>> from collections import OrderedDict 
>>> d = {'Gears of war 3': 6, 'Batman': 5, 'gears of war 3': 4, 'Rocksmith': 5, 'Madden': 3} 

>>> od = OrderedDict(sorted(d.items(), key=lambda x:x[1], reverse=True)) 
>>> od 
OrderedDict([('Gears of war 3', 6), ('Batman', 5), ('gears of war 3', 4), ('Rocksmith', 5), ('Madden', 3)]) 

>>> od.keys() 
['Gears of war 3', 'Batman', 'gears of war 3', 'Rocksmith', 'Madden'] 
>>> od.values() 
[6, 5, 4, 5, 3] 
>>> od['Batman'] 
5 

"आदेश" आप एक JSON ऑब्जेक्ट में देखते हैं के रूप में JSON ऑब्जेक्ट [RFC4267] अव्यवस्थित है, सार्थक नहीं है।

यदि आप अपने JSON में सार्थक क्रम चाहते हैं, तो आपको एक सूची का उपयोग करने की आवश्यकता है (जिस तरह से आप चाहते थे)।

{ 
    "count": 24, 
    "top 5": [ 
    {"Gears of war 3": 6}, 
    {"Batman": 5}, 
    {"Rocksmith": 5}, 
    {"gears of war 3": 4}, 
    {"Madden": 3} 
    ] 
} 

ही dict d देखते हुए, आप एक हल कर सूची उत्पन्न कर सकते हैं द्वारा (जो आप क्या चाहते हैं):

>>> l = sorted(d.items(), key=lambda x:x[1], reverse=True) 
>>> l 
[('Gears of war 3', 6), ('Batman', 5), ('Rocksmith', 5), ('gears of war 3', 4), ('Madden', 3)] 

अब तुम सिर्फ पारित l कुछ इस तरह आप क्या चाहते हैं होता है m['top5'] पर और इसे डंप करें:

m["Top 5"]= l 
k = json.dumps(m) 
+0

@emschorsch मैं आउटपुट dict को किसी अन्य निर्देश में जोड़ना चाहता हूं और इसे जेसन प्रतिक्रिया में बदलना चाहता हूं। –

+0

@emschorsch मैंने ऊपर अपना कोड संपादित किया है कृपया इसके माध्यम से जाएं। –

+0

@CodeNinja JSON ऑब्जेक्ट्स के पास कोई ऑर्डर नहीं है, इसलिए आपको इसके बजाय एक सूची का उपयोग करने की आवश्यकता होगी। –