Вы не можете сортировать стандартный словарь, но можете сортировать и отображать элементы.
from datetime import datetime
D = {'28.10.11/D/text1/' : {'key':'value1'},
'27.01.11/D/text2/' : {'key':'value2'},
'07.11.12/D/text3/' : {'key':'value3'}}
for k in sorted(D,key=lambda k: datetime.strptime(k[:8],"%d.%m.%y")):
print(k,D[k])
Выход:
27.01.11/D/text2/ {'key': 'value2'}
28.10.11/D/text1/ {'key': 'value1'}
07.11.12/D/text3/ {'key': 'value3'}
Если вы хотите использовать список:
from datetime import datetime
from pprint import pprint
L = [('28.10.11/D/text1/' , {'key':'value1'}),
('27.01.11/D/text2/' , {'key':'value2'}),
('07.11.12/D/text3/' , {'key':'value3'})]
L.sort(key=lambda k: datetime.strptime(k[0][:8],"%d.%m.%y"))
pprint(L)
Выход:
[('27.01.11/D/text2/', {'key': 'value2'}),
('28.10.11/D/text1/', {'key': 'value1'}),
('07.11.12/D/text3/', {'key': 'value3'})]
Наконец, если вы все еще хотите словарю поведение, в OrderedDict помнит, что ключи заказа вставлены, поэтому:
from collections import OrderedDict
from datetime import datetime
from pprint import pprint
D = {'28.10.11/D/text1/' : {'key':'value1'},
'27.01.11/D/text2/' : {'key':'value2'},
'07.11.12/D/text3/' : {'key':'value3'}}
OD = OrderedDict(sorted(D.items(),
key=lambda k: datetime.strptime(k[0][:8],"%d.%m.%y"))
pprint(OD)
Выход:
{'27.01.11/D/text2/': {'key': 'value2'},
'28.10.11/D/text1/': {'key': 'value1'},
'07.11.12/D/text3/': {'key': 'value3'}}
Словари не имеют порядка и поэтому не могут быть отсортированы. Вы хотите, чтобы на выходе был список кортежей '(key, value)? –
Не знал об этом. Хорошо, измените его на список. Благодаря! – Apache