簡體   English   中英

使用日期時間鍵在python中排序和排列字典

[英]Sorting and arranging a dictionary in python with datetime keys

我在 python 中制作字典時遇到問題,我有一個字典,它的鍵由日期時間數據類型組成,這是從單個字典中提取的,問題是有時日期在覆蓋相同日期的數據中重復。 數據的格式如下所示:

{
"2020-09-09": [data],
"2020-09-08": [A],
"2020-09-08": [B],
"2020-09-07": [data],
"2020-09-08": [C]
}

在python中,我寫了這樣的代碼來制作字典,

row = dict({
            str(datetime.datetime.strptime(row.get('date'), '%Y-%m-%d').date()): [row]
        }) 

我從中得到的輸出,我不確定如何重新格式化它,因為密鑰不能在字典中重復

{
"2020-09-09": [data],
"2020-09-08": [C],
"2020-09-07": [data],
}

所需的輸出:

{
"2020-09-09": [data],
"2020-09-08": [[A],[B],[C]],
"2020-09-07": [data]
}

你想使用 collections.defaultdict

from collections import defaultdict
dd = defaultdict(list)
dd["1"].append(3)
dd["2"].append(4)
dd["1"].append(1)
dd["2"].append(2)

print(dd)
# defaultdict(<class 'list'>, {'1': [3, 1], '2': [4, 2]})

如果您想在每次追加后都對列表進行排序,那么您可以使用二進制插入對列表進行自定義實現

或在添加值后手動排序

for el in dd.values():
    el.sort()
print(dd)
# defaultdict(<class 'list'>, {'1': [1, 3], '2': [2, 4]})

這是一種可能的建議。 從您的問題中不太清楚數據來自哪里,所以我不知道這個建議是否符合您的需求。

data_list = [
("2020-09-09", 'data1'),
("2020-09-08", 'A'),
("2020-09-08", 'B'),
("2020-09-07", 'data2'),
("2020-09-08", 'C')]

d = {}
for date,value in data_list:
  if date in d:
    d[date].append(value)
  else:
    d[date] = [value]

# d = {'2020-09-09': ['data1'], '2020-09-08': ['A', 'B', 'C'], '2020-09-07': ['data2']}

或者,使用defaultdict

import collections
d = collections.defaultdict(list)
for date, value in data_list:
  d[date].append(value)

# d = defaultdict(<class 'list'>, {'2020-09-09': ['data1'], '2020-09-08': ['A', 'B', 'C'], '2020-09-07': ['data2']})

暫無
暫無

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

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