我想对一个键进行排序的字典是月-年。
例如:对于
APEX$_ACL TABLE
APEX$_WS_FILES TABLE
APEX$_WS_HISTORY TABLE
APEX$_WS_LINKS TABLE
APEX$_WS_NOTES TABLE
APEX$_WS_ROWS TABLE
APEX$_WS_TAGS TABLE
APEX$_WS_WEBPG_SECTIONS TABLE
APEX$_WS_WEBPG_SECTION_HISTORY TABLE
等
我的字典键应按以下顺序排序:
March 2017,January 2018,May 2017
该怎么办?
例如:
March 2017,May 2017,January 2018
注意:月度的值是动态地出现的。
答案 0 :(得分:2)
您需要将键转换为日期,以便它们可以正确排序。假设您的字典称为example_dict
import datetime
keys = list(example_dict.keys())
keys.sort(key=lambda x: datetime.datetime.strptime(x,'%B %Y'))
答案 1 :(得分:1)
您需要使用特殊键功能进行排序:
months = ['January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']
month_num = dict(zip(months, range(12)))
def compare(date):
month, year = date.split(' ')
return (year, month_num[month])
dates = {
'February 2017': {'a': 1.0, 'b': 683.01},
'March 2018': {'a': 0.0, 'b': 623.79}}
dict(sorted(dates.items(), key=lambda x: compare(x[0])))
答案 2 :(得分:0)
FYI:在python-2.7中,由于字典是“无序的”,可以这么说,由于两个键具有相同的值,因此原始帖子中的字典在语法上是不正确的。解释器将覆盖其中之一。
根据您的原始帖子,我认为其中之一应为2018年5月,这就是我用来回答的字典:
{'February 2017': {'a': 1.0, 'b': 683.01},
'May 2018': {'a': 0.0, 'b': 623.79},
'March 2018': {'a': 1.0, 'b': 683.01}}
由于如上所述,字典的排序不明显(哈希值),因此我们必须转换为列表然后试一下。一种衬板解决方案如下:
sorted(list(data.items()), key=lambda x: [x[0].split()[-1], x[0].split()[0], x[1]])
您将获得如下输出:
>>> sorted(list(data.items()), key=lambda x: [x[0].split()[-1], x[0].split()[0], x[1]])
[('February 2017', {'a': 1.0, 'b': 683.01}), ('March 2018', {'a': 1.0, 'b': 683.01}), ('May 2018', {'a': 0.0, 'b': 623.79})]
>>>