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)
不要考虑这一年.根据月份排序.
提前致谢
创建一个字典映射月份到序数:
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)
在这种特定情况下没有区别,因为每月数据已经按排序顺序排列.
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |