Python實現對dict的key使用自定義方法進行排序

這幾天有個需求,dict裏面key是轉成字符串的日期,然後需要對dict裏面的key值,按照日期大小進行排序,搜了一下沒有什麼好的辦法,借鑑了一下java的思路,寫了一個對Python裏面的dict字典的key鍵,按照自定義的方法進行排序,排序完成後返回排序好的dict。

1、先寫一個排序器,用於比較兩個鍵誰大誰小,這裏就是實現key排序的關鍵方法。

此處爲rankDate,用於日期排序,需要配合strtodate把字符串轉爲時間先。

2、排序方法,傳入需要排序的字典、排序方法、順序爲降序或升序

import datetime

# 你不一定需要此方法,只是我用來配合字符串日期比較大小用的
def strtodate(time: str):
    """
    把字符串str轉爲日期date
    :param time:需要轉換的字符串
    :return:轉換後的時間
    """
    return datetime.datetime.strptime(time, "%Y.%m.%d")

def rankDate(d1: str, d2: str) -> bool:
    """
    對兩個str安裝需要的方法比較大小,此處替換成你需要的排序方法
    :param d1: 第一個值
    :param d2: 第二個值
    :return: True:第一個值比第二個值大;False:第一個值比第二個值小
    """
    dd1 = strtodate(d1)
    dd2 = strtodate(d2)
    if dd1 > dd2:
        return True
    else:
        return False

def sortDictByKey(d: dict, method=rankDate, ASC=False) -> dict:
    """
    傳入一個字典,然後按字典的key鍵,使用指定的方法進行排序
    :param d: 需要排序的字典
    :param method: 排序方法
    :param ASC: 默認爲降序,如需升序則爲True
    :return: 排序好的字典
    """
    newDict = {}
    sortedKeysList = []
    for i in d.keys():
        if len(sortedKeysList) == 0:
            sortedKeysList.append(i)
        else:
            isInsert = False
            for j in range(len(sortedKeysList)):
                if method(i, sortedKeysList[j]):
                    sortedKeysList.insert(j, i)
                    isInsert = True
                    break
            if isInsert: continue
            sortedKeysList.append(i)
    if ASC:
        sortedKeysList.reverse()
    for i in sortedKeysList:
        newDict[i] = d[i]
    return newDict

3、使用方法:複製以上代碼,然後

oldDict = {
    '2019.01.01': '1',
    '2019.01.03': '3',
    '2019.01.02': '2',
    '2019.01.04': '4',
}
newDict = sortDictByKey(oldDict, rankDate)
# rankDate爲排序方法
print(newDict)

# 打印結果:{'2019.01.04': '4', '2019.01.03': '3', '2019.01.02': '2', '2019.01.01': '1'}

 

發佈了17 篇原創文章 · 獲贊 20 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章