从嵌套字典返回排序列表

时间:2013-10-28 01:03:58

标签: python

我正在尝试根据嵌套字典的值创建一个有序列表。

这是我的源数据:

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

我认为问题在于我使用错误的语法从dict中获取requests密钥...我尝试了不同的方法,但我总是得到类似的错误。我做错了什么?

2 个答案:

答案 0 :(得分:2)

迭代字典会为您提供密钥。您可以改为使用items

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

答案 1 :(得分: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}}
]