我在用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]
}
答案 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']})