簡體   English   中英

Python 排序嵌套字典

[英]Python sort nested dictionary

我想對這個嵌套字典進行兩次排序。 首先,我想按時間排序,然后按key。 這是一個嵌套的嵌套字典。 時間應先過濾,然后通過內部字典的鍵(“FileNameXXX”)過濾。

data = {1: {"05:00:00": {"FileName123": "LineString1"}},
        2: {"16:00:00": {"FileName456": "LineString2"}},
        3: {"07:00:00": {"FileName789": "LineString3"}},
        4: {"07:00:00": {"FileName555": "LineString4"}}}

預期結果:

1: {"05:00:00": {"FileName123": "LineString1"}}
3: {"07:00:00": {"FileName789": "LineString3"}}
4: {"07:00:00": {"FileName555": "LineString4"}}
2: {"16:00:00": {"FileName456": "LineString2"}}

您可以通過為數據中的每個條目建立一些價值概念來實現這一點。 例如,我在下面的 function 中定義了數據條目的“值”,但請注意,它嚴重依賴於在第二個嵌套 dict 中只有一個鍵,該鍵也必須嚴格地格式化為字符串的時間。

def get_comparable(key):
    raw_time = list(data[key].keys())[0]
    time = datetime.strptime(raw_time, "%H:%M:%S").time()
    return time.hour * 3600 + time.minute * 60 + time.second + key * 0.001

你可以使用:

for k in sorted(data, key=get_comparable):
    print(k, data[k])

output:

1 {'05:00:00': {'FileName123': 'LineString1'}}
3 {'07:00:00': {'FileName789': 'LineString3'}}
4 {'07:00:00': {'FileName555': 'LineString4'}}
2 {'16:00:00': {'FileName456': 'LineString2'}}

使用

sorted(data, key=lambda x: list(data[x].keys())[0])

將產生相同的 output 但要小心並注意它不會考慮第一級鍵(數字)的值,並且會按字典順序對時間進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM