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从字典中获取密钥......我尝试了不同的方法,但我总是遇到类似的错误。我究竟做错了什么?

4

2 回答 2

2

迭代字典会给你它的键。您可以items改用:

sorted(data["countries"].items(), key=lambda kv: kv[1]["requests"])
于 2013-10-28T01:06:30.077 回答
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}}
]
于 2013-10-28T01:14:09.830 回答