字典列表在python中排序

Oma*_*maL 2 python sorting python-2.7

可能这是重复的.例如,我没有找到相同类型的问题我有一个字典列表

mylist=[
    {'month':'MAR2011','amount':90},
    {'month':'MAR2013','amount':190},
    {'month':'JUN2011','amount':290},
    {'month':'AUG2011','amount':930},
    {'month':'DEC2011','amount':30},
    {'month':'NOV2010','amount':40},
    {'month':'FEB 2013','amount':760},
    {'month':'SEP 2012','amount':330},
    {'month':'APR2013','amount':50},
    {'month':'NOV 2011','amount':450},
    {'month':'OCT 2012','amount':450},
]
Run Code Online (Sandbox Code Playgroud)

我想获得这样的输出:

[
{'month':'FEB 2013','amount':760},
{'month':'MAR2011','amount':90},
{'month':'MAR2013','amount':190},
{'month':'APR 2013','amount':50},
{'month':'JUN2011','amount':290},
{'month':'AUG2011','amount':930},
{'month':'SEP 2012','amount':330},
{'month':'OCT 2012','amount':450},
{'month':'NOV2010','amount':40},
{'month':'NOV 2011','amount':450},
{'month':'DEC2011','amount':30},
]
Run Code Online (Sandbox Code Playgroud)

不要考虑这一年.根据月份排序.

提前致谢

Mar*_*ers 8

创建一个字典映射月份到序数:

from calendar import month_abbr

month_to_index = {month.upper(): i for i, month in enumerate(month_abbr[1:])}
Run Code Online (Sandbox Code Playgroud)

并使用它来排序:

sorted(mylist, key=lambda d: month_to_index[d['month'][:3]])
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from calendar import month_abbr
>>> month_to_index = {month.upper(): i for i, month in enumerate(month_abbr[1:])}
>>> import pprint
>>> pprint.pprint(sorted(mylist, key=lambda d: month_to_index[d['month'][:3]]))
[{'amount': 760, 'month': 'FEB 2013'},
 {'amount': 90, 'month': 'MAR2011'},
 {'amount': 190, 'month': 'MAR2013'},
 {'amount': 50, 'month': 'APR2013'},
 {'amount': 290, 'month': 'JUN2011'},
 {'amount': 930, 'month': 'AUG2011'},
 {'amount': 330, 'month': 'SEP 2012'},
 {'amount': 450, 'month': 'OCT 2012'},
 {'amount': 40, 'month': 'NOV2010'},
 {'amount': 450, 'month': 'NOV 2011'},
 {'amount': 30, 'month': 'DEC2011'}]
Run Code Online (Sandbox Code Playgroud)

要按月第一年,第二年排序,从关键函数返回一个元组:

sorted(mylist, key=lambda d: (month_to_index[d['month'][:3]], d['month'][-4:]))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> pprint.pprint(sorted(mylist, key=lambda d: (month_to_index[d['month'][:3]], d['month'][-4:])))
[{'amount': 760, 'month': 'FEB 2013'},
 {'amount': 90, 'month': 'MAR2011'},
 {'amount': 190, 'month': 'MAR2013'},
 {'amount': 50, 'month': 'APR2013'},
 {'amount': 290, 'month': 'JUN2011'},
 {'amount': 930, 'month': 'AUG2011'},
 {'amount': 330, 'month': 'SEP 2012'},
 {'amount': 450, 'month': 'OCT 2012'},
 {'amount': 40, 'month': 'NOV2010'},
 {'amount': 450, 'month': 'NOV 2011'},
 {'amount': 30, 'month': 'DEC2011'}]
Run Code Online (Sandbox Code Playgroud)

在这种特定情况下没有区别,因为每月数据已经按排序顺序排列.

  • 你可能需要`.lower()`...或`.upper()`:) (2认同)