[英]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.