2013-10-28 41 views
1

我想創建一個基於嵌套字典值的有序列表。從嵌套字典返回排序列表

這裏是我的源數據:

data = { 
    'countries': { 
     'BE': { 
      u'impressions': 0, 
      u'requests': 807 
     }, 
     'BG': { 
      u'impressions': 0, 
      u'requests': 130 
     }, 
     'JP': { 
      u'impressions': 0, 
      u'requests': 1923 
     } 
    }, 
    'totals': {} 
} 

和這裏的結果,我會想到:

list = [{'JP': { u'impressions': 0, u'requests': 1923 }}, {'BE': { u'impressions': 0, u'requests': 807 }}] 

,最後我寫做過濾代碼:

list = sorted(data["countries"], key=itemgetter('requests'))[:2] 

但我總是遇到這樣的錯誤:

TypeError: string indices must be integers 

我認爲問題是我使用錯誤的語法從字典中得到requests鍵......我嘗試了不同的方法,但我總是得到類似的錯誤。我究竟做錯了什麼?

回答

2

迭代字典會爲您提供密鑰。你可以使用items代替:

sorted(data["countries"].items(), key=lambda kv: kv[1]["requests"]) 
+0

哦,是的。看起來你也想'reverse = True'。 – Ryan

+0

謝謝!這正是我需要的。 – Andrea

0
>>> l = data['countries'] 
>>> l2 = [{key:l[key]} for key in l.keys()] 
>>> sorted(l2, key=lambda x:x[x.keys()[0]]['requests'],reverse=True) 

[{'JP': {u'impressions': 0, u'requests': 1923}}, 
{'BE': {u'impressions': 0, u'requests': 807}}, 
{'BG': {u'impressions': 0, u'requests': 130}} 
]