使用日期时间键在python中对字典进行排序和排列

时间:2020-09-23 08:49:05

标签: python sorting dictionary

我在用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]
}

2 个答案:

答案 0 :(得分:0)

您要使用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]})

答案 1 :(得分:0)

这是一个可能的建议。从您的问题中并不清楚数据的来源,所以我不知道这个建议能满足您的需求。

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']})