我的清單:
old_list = [
{'date': '2021-11-12', 'hour': '1.0'},
{'date': '2021-11-12', 'hour': '3.0'},
{'date': '2021-11-12', 'hour': '12.0'},
{'date': '2021-11-12', 'hour': '10.0'},
{'date': '2021-11-12', 'hour': '11.0'},
{'date': '2021-11-12', 'hour': '2.0'},
{'date': '2021-11-13', 'hour': '3.0'},
{'date': '2021-11-13', 'hour': '10.0'},
{'date': '2021-11-13', 'hour': '1.0'},
{'date': '2021-11-13', 'hour': '2.0'},
{'date': '2021-11-13', 'hour': '11.0'},
{'date': '2021-11-13', 'hour': '12.0'},
]
我希望通過對它們進行排序date,然后hour在這樣的順序(10PM -當天的凌晨3點):
注:它需要在正確的順序如下的例子
old_list = [
{'date': '2021-11-12', 'hour': '10.0'},
{'date': '2021-11-12', 'hour': '11.0'},
{'date': '2021-11-12', 'hour': '12.0'},
{'date': '2021-11-12', 'hour': '1.0'},
{'date': '2021-11-12', 'hour': '2.0'},
{'date': '2021-11-12', 'hour': '3.0'},
{'date': '2021-11-13', 'hour': '10.0'},
{'date': '2021-11-13', 'hour': '11.0'},
{'date': '2021-11-13', 'hour': '12.0'},
{'date': '2021-11-13', 'hour': '1.0'},
{'date': '2021-11-13', 'hour': '2.0'},
{'date': '2021-11-13', 'hour': '3.0'},
]
這怎么可能?
附加資訊
用例是我有幾個日期的 24 小時范圍資料。我想對它們進行date排序,并根據6AM - 5AM方式對它們進行排序。
uj5u.com熱心網友回復:
IIUC,一種modulo用于反映時間線偏移的方法:
sorted(old_list, key=lambda x: (x["date"], (float(x["hour"]) - 6)%24))
輸出:
[{'date': '2021-11-12', 'hour': '10.0'},
{'date': '2021-11-12', 'hour': '11.0'},
{'date': '2021-11-12', 'hour': '12.0'},
{'date': '2021-11-12', 'hour': '1.0'},
{'date': '2021-11-12', 'hour': '2.0'},
{'date': '2021-11-12', 'hour': '3.0'},
{'date': '2021-11-13', 'hour': '10.0'},
{'date': '2021-11-13', 'hour': '11.0'},
{'date': '2021-11-13', 'hour': '12.0'},
{'date': '2021-11-13', 'hour': '1.0'},
{'date': '2021-11-13', 'hour': '2.0'},
{'date': '2021-11-13', 'hour': '3.0'}]
洞察力:
(float(x["hour"]) - 6) % 24:將您的時間分布(也就是早上 6 點 - 凌晨 5 點)改變 6 小時(即通常的 24 小時)。然后轉移的時間反彈到 24 小時邊界。
因此,原始資料中的小時數轉換為:
1.0 --> 19
3.0 --> 21
12.0 --> 6
10.0 --> 4
11.0 --> 5
2.0 --> 20
3.0 --> 21
10.0 --> 4
1.0 --> 19
2.0 --> 20
11.0 --> 5
12.0 --> 6
uj5u.com熱心網友回復:
如果時間復雜度無關緊要(除非 hour_order 只有很少的元素,否則一切都會好起來的),這里是:
from datetime import datetime
hour_order = ["10.0", "11.0", "12.0", ...]
sorted(
old_list,
key=lambda d: (datetime.strptime(d["date"], "%Y-%m-%d").date(), hour_order.index(d["hour"])),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386395.html
上一篇:如何“取消參考”字典?
下一篇:將字典更改為集合(索引字典?)
