FYI: In python-2.7, since dictionaries are 'unordered', so to speak, your dictionary in the original post is syntactically incorrect, since there are two keys with the same value. The interpreter will override one of them.
I presumed that one of them should be May 2018, as per your original post, so that is the dictionary I used for my answer:
{'February 2017': {'a': 1.0, 'b': 683.01},
'May 2018': {'a': 0.0, 'b': 623.79},
'March 2018': {'a': 1.0, 'b': 683.01}}
Since, as stated above, dictionaries are not ordered obviously (hash values), so we must convert to a list and then play around. A one liner solution is as follows:
sorted(list(data.items()), key=lambda x: [x[0].split()[-1], x[0].split()[0], x[1]])
You get the output as follows:
>>> 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})]
>>>