基于多个词典列表的键对数据进行排序

Pav*_*T S 0 python sorting dictionary python-2.7

我有这样的清单

li = [
    {1: {'amount': 255, 'date': '25-02-2017'}},
    {2: {'amount': 25, 'date': '2-02-2017'}},
    {3: {'amount': 38, 'date': '20-02-2017'}},
]
Run Code Online (Sandbox Code Playgroud)

我试图基于的升序和降序对数据进行排序'amount'.

我尝试了以下但我无法得到我想要的结果:

import operator
li.sort(key=operator.itemgetter('amount'))
Run Code Online (Sandbox Code Playgroud)

from operator import itemgetter
newlist = sorted(li, key=itemgetter('amount'))
Run Code Online (Sandbox Code Playgroud)

两者都引发异常KeyError: 'amount'.

Mar*_*ers 6

您有一个带有单个键的词典列表,其值是另一个词典.这是具有密钥的嵌套字典'amount'.

您必须进入并获得该单一值:

newlist = sorted(li, key=lambda d: d.values()[0]['amount'])
Run Code Online (Sandbox Code Playgroud)

这仅适用于Python 2,其中d.values()是列表.在Python 3中,你必须使用它next(iter(d.values())['amount'].

你一定会觉得很没有产生嵌套结构的更好可言.将这些编号的键移动到另一个键值对中:

li = [
    {'id': 1', amount': 255, 'date': '25-02-2017'},
    {'id': 2, 'amount': 25, 'date': '2-02-2017'},
    {'id': 3, 'amount': 38, 'date': '20-02-2017'},
]
Run Code Online (Sandbox Code Playgroud)

此时您的原始尝试将起作用.您可以转换当前的数据结构,[dict(id=d.keys()[0], **d.values()[0]) for d in li]但最好修复生成列表的代码.