的想法在這裏是用OrderedDict
爲dictionary
有訂貨,同時OrderedDict保留掛單無用武之地。
這裏的想法是使用list of tuples of (key, value) pairs
,因爲dictionary
沒有排序範圍,而OrderedDict保留了輸入順序。 此外,我們必須將鍵轉換爲實際的datetime
對象爲了完美的工作,否則按字母順序排序基於字符串的字段。
代碼:
from datetime import datetime
#from collections import OrderedDict
data = {
"01-01-2015" : "some data",
"05-05-2015" : "some data",
"03-04-2015" : "some data"
}
#ordered_data = OrderedDict(
# sorted(data.items(), key = lambda x:datetime.strptime(x[0], '%d-%m-%Y'), reverse=True))
#Since OP is using python 2.6 where OrderedDict is not present, I changed the solution and the original solution is commented out
ordered_data = sorted(data.items(), key = lambda x:datetime.strptime(x[0], '%d-%m-%Y'), reverse=True)
print(ordered_data)
輸出:
[('05-05-2015', 'some data'), ('03-04-2015', 'some data'),
('01-01-2015', 'some data')]
說明:(對於鍵轉換爲日期時間排序)
如果保留日期字段字符串然後是字典ord呃被考慮,並且3
在0
之後,因此a>b
是True
,但是對於他們的日期對應物,情況並非如此。 Feb
肯定是在Jan
之後。
a = "30-01-2015"
b = "01-02-2015"
print(a>b) #True
a_datetime = datetime.strptime(a, '%d-%m-%Y')
b_datetime = datetime.strptime(b, '%d-%m-%Y')
print(a_datetime>b_datetime) #False
爲什麼''「03-04-2015」''在'「05-05-2015」之前? – styvane
*按日期鍵?*第二個代碼塊是你期望的還是第一個是?順便說一句,你需要[OrderedDict](https://docs.python.org/3/library/collections.html#collections.OrderedDict)。 –
一個簡單的谷歌/ stackoverflow搜索將清楚地告訴你,**一個Python字典不能被排序。** 必須使用不同的結構。 (ex-OrderedDict)。試試吧,讓我們知道。 – Shivendra