преобразовать dict в отсортированный dict в python

Я хочу преобразовать dict в отсортированный dict в Python

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

(в порядке убывания значений и результат должен быть диктом)

 emschorsch25 окт. 2012 г., 07:50
Почему вы хотите сделать это, а не просто отсортированный список?

Ответы на вопрос(1)

Решение Вопроса

Вы не можете сортировать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}
  ]
}

Учитывая тот же дикт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)
 K Z25 окт. 2012 г., 08:13
@CodeNinja JSON-объекты не имеют порядка, поэтому вам нужно будет использовать вместо этого список.
 Code Ninja25 окт. 2012 г., 07:58
@emschorsch Я хочу добавить выходной dict к другому dict и преобразовать его в ответ json.
 Code Ninja25 окт. 2012 г., 08:43
Спасибо за пост !!
 Code Ninja25 окт. 2012 г., 08:09
@emschorsch Я редактировал мой код выше, пожалуйста, пройдите его.
 K Z25 окт. 2012 г., 09:09
@CodeNinja рад помочь :)

Ваш ответ на вопрос