2013-10-28 4 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 из dict ... Я пробовал разные способы, но всегда получаю подобные ошибки. Что я делаю не так?

ответ

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}} 
] 
Смежные вопросы